我找不到当前游戏对象的子对象(预制 我有父游戏对象(它是从另一个脚本的预制件创建的),并且有2个孩子。层次结构如下:
RewardItemPrefab
---- RewardName(有文本组件)。
---- Image(拥有SpriteRenderer组件)。
void Start ()
{
if (RewardText == null)
{
RewardText = this.GetComponentInChildren<Text>();
if (RewardText == null)
{
Debug.Log("RewardText == null");
return;
}
}
RewardText.text = _text;
if (RewardImage == null)
{
RewardImage = this.GetComponentInChildren<Image>();
if (RewardImage == null)
{
Debug.Log("RewardImage == null");
return;
}
}
RewardImage.sprite = Reward.LoadRewardSprite(RewardImageProp);
}
但在此之前,正如我所说,这个游戏对象是从另一个脚本创建的:
var go = new GameObject(reward.Name, typeof(RewardProfileView));
go.GetComponent<RewardProfileView>().RewardItem = reward;
'RewardItem'属性是奖励类属性:
public Reward RewardItem
{
get { return _reward; }
set
{
if (value != null)
{
_reward = value;
RewardTextProp = _reward.Name;
RewardImageProp = _reward.Name;
}
else
{
_reward = null;
}
}
}
RewardTextProp和RewardImageProp只是字符串字段。
注意:需要能够设置动态创建的预制件的子属性。
答案 0 :(得分:0)
如果您在一个Start()
方法中创建 GameObject ,然后尝试使用其他Start()
方法访问它,则会遇到麻烦。这是竞争条件的典型示例,其中您不知道将首先执行哪个Start()
方法。
最简单,最直接的解决方案是将 GameObject 创建部分放在Awake()
方法中。
Awake()
方法保证在Start()
方法开始运行之前为所有GameObject运行。