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 异常。
不知道出了什么问题。将一些代码外包到另一个 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 异常。