zoukankan      html  css  js  c++  java
  • 协程的NullReferenceException 错误

    1. public void loadPic(string url)
    2. {
    3. WWW www = new WWW(url);
    4. StartCoroutine(WaitForRequest(www));
    5. }
    6. IEnumerator WaitForRequest(WWW www)
    7. {
    8. yield return www;
    9. // check for errors
    10. if (www.error == null)
    11. {
    12. Debug.Log("WWW Ok!: " + www.text);
    13. image.GetComponent<Image>().overrideSprite = Sprite.Create(www.texture, new Rect(0, 0, 438, 441), new Vector2(0.5f, 0.5f));
    14. }
    15. else
    16. {
    17. Debug.Log("WWW Error: " + www.error);
    18. }
    19. }
    1. ApiClient apiclient = new ApiClient();
    2. string imageurl = apiclient.callSearchApiWithCSharp(realEstateType, preisText.text, zimmerText.text);
    3. Debug.Log(imageurl);
    4. apiclient.loadPic(imageurl);
    • 协同程序由协程调度程序运行,并且绑定到用于启动协程的MonoBehaviour。StartCoroutine是MonoBehaviour的实例成员。

    • 不得使用“new”创建所有组件。始终需要使用AddComponent创建组件。组件只能在GameObjects上“活动”。

    • 错误初始化的组件(即使用“new”创建)将变为“假的空对象”。

    “假空对象”是真正的C#托管类,但它们缺少引擎核心中的本机C ++等价物。它们仍然可以用作“普通”托管类,但是与Untiy无关的任何东西都可以工作。此外,“UnityEngine.Object”基类会重载==运算符,并且当它缺少本机部分时“伪造”该对象为空。当您使用new创建Component类或者销毁此类对象时,会发生这种情况。

    因此,解决方案是您必须将“ApiClient”组件附加到GameObject。与组件不同,GameObjects可以使用“new”创建。所以你可以简单地替换

    1. ApiClient apiclient = new ApiClient();

    1. ApiClient apiclient = (new GameObject("SomeObjName")).AddComponent<ApiClient>();

    这将创建一个名为“SomeObjName”的新GameObject,并将ApiClient组件添加到其中。

    请记住,GameObject(及其组件)现在将出现在场景中,直到您将其销毁。

    作为替代方案,您可以使用以下命令将ApiClient组件附加到调用脚本所附加到的同一个游戏对象:

    1. ApiClient apiclient = gameObject.AddComponent<ApiClient>();

    每个组件(因此MonoBehaviour)都具有gameObject可用于访问此组件所附加的GameObject 属性。

    编辑
    关于“销毁”的快速说明。销毁组件时,只会销毁和删除该组件。如果你在GameObject引用上调用Destroy,它将破坏包含所有附加组件的游戏对象(因为它们不存在没有GameObject)以及GameObject的所有子游戏对象。

    或者建一个该类的实例,不要用单例模式。

  • 相关阅读:
    arm基础
    数据的封装
    网络安全基础
    qt5学习笔记
    nginx修改配置
    proteus_base1
    20191022
    20191015
    20191014
    20191013
  • 原文地址:https://www.cnblogs.com/mcyushao/p/9636467.html
Copyright © 2011-2022 走看看