2016-11-08 14 views
0

Я хочу изменить Sprite из в GameObject через C# сценарий. URL-адрес изображения, который я успешно получаю от вызова REST API. С WWW Я хочу создать новый Sprite для GameObject. Но теперь я не знаю, что я делаю неправильно. Я прочитал, чтобы решить проблему, используя https://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html, но как подробно?Unity3D - NullReferenceException UnityEngine.MonoBehaviour.StartCoroutine

Это скрипт событие 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://[email protected]/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() 

ответ

0

Попробуйте сделать ApiClient зависимым от класса MonoBehaviour и бросить его как компонент объекта в сцене или напрямую вызвать Coroutine.

 Смежные вопросы

  • Нет связанных вопросов^_^