我正在尝试向Person添加Quest对象。它成功为一个并为另一个提供nullreferenceexception,我在这里做错了什么? 附:播放器和请求者在Unity检查器中设置。
public class GameCreator : MonoBehaviour {
private Quest quest;
public Player player;
public Requestor requestor;
void Start() {
quest = createQuest();
requestor.thisPerson.SetQuest(quest); //this is the problem
player.thisPerson.SetQuest(quest);
}
}
public class Player : MonoBehaviour {
public Person thisPerson;
void Start() {
thisPerson = new Person("Name");
}
}
public class Requestor: MonoBehaviour {
public Person thisPerson;
void Start() {
thisPerson = new Person("Name");
}
}
public class Person {
public Quest quest;
void SetQuest(Quest quest) {
this.quest = quest;
}
}
有什么建议可以解决这个问题?
答案 0 :(得分:3)
将变量初始化移至Awake()
,请参阅以下documentation(释义):
唤醒用于初始化之前的任何变量或游戏状态 游戏开始....并使用Start来回传递任何信息。
编写GameCreator.Start()
的方式依赖于Unity调用脚本的任意顺序。 GameCreator
可能是第一个被调用的对象,在这种情况下,您的其他脚本都没有初始化它们的值。
其他可能的错误:
requestor
,我将假设这是在Unity的Inspector中完成的。答案 1 :(得分:1)
正如Jordak所说,你的Start方法可以以任何可能的顺序运行,所以你不能依赖另一个组件的Start。您有几种方法可以解决此问题: