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