【发布时间】:2019-01-24 04:03:18
【问题描述】:
我有一个在 Unity 中创建 UI 按钮的脚本。它创建预制件的实例,其中还包含自定义脚本组件。我想实例化一个新副本并立即访问新创建对象脚本的值成员/字段:
turretButtons.Add(Instantiate(buttonProto, gameObject.transform));
turretButtons[turretButtons.Count - 1].image.sprite = turretIcon;
turretButtons[turretButtons.Count - 1].GetComponent<DetailsWindowController>().turretDefinition = turretDef;
第一行创建新实例,第二行更改图标,两者都完美运行。然而,在第三个中,我尝试访问 DetailsWindowController 脚本/类的 turretDefinition 公共成员抛出“NullReferenceException:对象引用未设置为对象的实例”。我错过了什么?
【问题讨论】:
-
能把turretButtons和buttonProto的类型包括一下吗
-
是的,我知道这是基本的,但是您能否附上检查员屏幕截图来显示这些设置是如何设置的?特别是 buttonProto 预制件确实附加了一个 DetailsWindowController?
-
您缺少参考。这就是错误消息告诉您的内容。通常,您不应该在不检查 Null 引用的情况下将 GetComponent() 与成员访问联系起来。
-
你确定
DetailsWindowController在同一个游戏对象上,而不是在层次结构中更深吗?你可以试试GetComponentInChildren<DetailsWindowController>(true)。顺便说一句,做var newButton = Instantiate ...并使用newButton而不是turretButtons[turret buttons.Count-1]并在完成设置值后将其添加到列表中会更聪明;) -
@ryeMoss 必须是
Button buttonProto和List<Button> turretButtons否则第一行和第二行已经抛出编译器错误。