实例化后立即访问脚本组件

时间:2019-01-22 23:01:20

标签: c# object unity3d

我有一个在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:对象引用未设置为对象实例”。我想念什么?

1 个答案:

答案 0 :(得分:1)

您要查找的组件可能未附加到与GameObject组件完全相同的Button上。

您应该使用GetComponentInChildren以便始终在按钮层次结构中向下递归查找组件。另请注意,true参数是在残疾儿童上查找组件所必需的。如果按钮被禁用则可能很有用。

var newButton = Instantiate(buttonProto, gameObject.transform);

newButton.image.sprite = turretIcon;
newButton.GetComponentInChildren<DetailsWindowController>(true).turretDefinition = turretDef;

turretButtons.Add(newButton);