【问题标题】:unity3d - NullReferenceException UnityEngine.MonoBehaviour.StartCoroutineunity3d - NullReferenceException UnityEngine.MonoBehaviour.StartCoroutine
【发布时间】:2017-03-22 17:47:05
【问题描述】:

我想通过 C# 脚本更改 GameObjectSprite。我从 REST API 调用中成功获得的图片 URL。通过 WWW,我想为 GameObject 创建新的 Sprite。但现在我不知道我做错了什么。我通过使用https://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html 阅读以解决问题,但详细程度如何?

这是一个按钮的 OnClick 事件脚本:

    ApiClient apiclient = new ApiClient();
    string imageurl = apiclient.callSearchApiWithCSharp(realEstateType, preisText.text, zimmerText.text);
    Debug.Log(imageurl);
    apiclient.loadPic(imageurl);

获取图片并创建其精灵的方法:

public void loadPic(string url)
{
    WWW www = new WWW(url);
    StartCoroutine(WaitForRequest(www));
}

IEnumerator WaitForRequest(WWW www)
{
    yield return www;

    // check for errors
    if (www.error == null)
    {
        Debug.Log("WWW Ok!: " + www.text);
        image.GetComponent<Image>().overrideSprite = Sprite.Create(www.texture, new Rect(0, 0, 438, 441), new Vector2(0.5f, 0.5f));
    }
    else
    {
        Debug.Log("WWW Error: " + www.error);
    }
}

输出是:

https://s@sandboxpicis24-a.akamaihd.net/pic/orig02/L/106/539/941/106539941-0.png

NullReferenceException
UnityEngine.MonoBehaviour.StartCoroutine (IEnumerator routine) (at C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineMonoBehaviourBindings.gen.cs:61)
ApiClient.loadPic (System.String url) (at Assets/ApiClient.cs:89)
ObjectTypeListener.callObjectType () (at Assets/ObjectTypeListener.cs:59)
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:153)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:634)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:769)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:53)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:52)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:269)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
ControllerTrack2:ProcessTrigger(PointerEventData, GameObject) (at Assets/ControllerTrack2.cs:77)
ControllerTrack2:Process() (at Assets/ControllerTrack2.cs:49)
UnityEngine.EventSystems.EventSystem:Update()

【问题讨论】:

    标签: c# unity3d sprite gameobject ienumerator


    【解决方案1】:

    尽量让ApiClient类依赖MonoBehaviour,作为场景中的一个对象的组件fling,或者直接调用Coroutine。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多