Unity3D C# - NullReferenceException 尽管附加了文本并且方法有效

Unity3D C# - NullReferenceException although Text is attached and methods work

不知道出了什么问题。将一些代码外包到另一个 class 中会出现问题。如果下面的代码在同一个class,就可以正常工作。

SearchClient.cs

void callExposeAPi (string id)
{
    ExposeClient exposeClient = (new GameObject("ExposeClient")).AddComponent<ExposeClient>();
    exposeClient.loadExpose(id);
}

ExposeClient.cs

public Text _baserentText; // is attached to Text in Unity

public void loadExpose(string id)
{
    [some API stuff...]
    Debug.Log(result.exposeexpose.realEstate.baseRent); // 480
    makeUseOfExposeUI(result.exposeexpose.realEstate);
}

void makeUseOfExposeUI (Realestate realestate)
{
    Debug.Log(realestate.baseRent); // 480
    _baserentText.text = realestate.baseRent.ToString();
}

我知道发生了什么,在您的 callExposeAPI 方法中,您正在创建一个新的 ExposeClient 实例,然后通过查看您在 ExposeClient.cs 中的评论,您在通过editor _baserentText 的关联与您通过编辑器手动关联的对象发生,如果您动态创建一个实例,则必须以不同的方式完成此关联,或者您可以这样做:

void callExposeAPi (string id)
{
    ExposeClient exposeClient = GameObject.Find("ExposeClient").GetComponent<ExposeClient>();
    exposeClient.loadExpose(id);
}

此处的不同之处在于,您使用的游戏对象已包含附加的 ExposeClient 脚本,并且其序列化字段“_baserentText”已定义,不会引发 null 异常。