我不明白为什么"空指针异常"在Unity?

时间:2016-05-15 18:47:33

标签: c# unity3d

在我的C#lives类中我有一个class属性: public int life = 0; 在我的C#松散课程中(所以,另一个剧本),我想要获得我生命课堂的生活属性,但我不会成功,怎么做?

当我这样做时

var lv = new lives ();
int lv1 = lv.life;

它告诉我Unity不允许。我必须使用GetComponent

所以我使用get component

var lv = gameObject.GetComponent<lives> ();
int lv1 = lv.life;

我有一个空指针异常,所以这是不可理解的?

1 个答案:

答案 0 :(得分:1)

您不使用new来创建对MonoBehaviour派生类的引用。

GetComponent调用需要与该类实际上的游戏对象相关联:

public GameObject objectWithLives;    // populate this e.g. via inspector

...

Lives lives = objectWithLives.GetComponent<Lives>();    // NOTE: Always start classes with an uppercase!

Lives lives = gameObject.GetComponent<Lives>();

仅在该脚本与此脚本位于同一对象上时才有效。

您不需要将其他脚本的变量实际存储到局部变量中(至少如果它们引用相同的值,则可以执行此操作)。只需说出像

这样的内容
lives.life = 5;

如果该类(脚本)实际上不是在游戏对象上,那么你不是从MonoBehaviour派生的(这不是必须的,只有当你需要来自MonoBehaviour的东西和/或想要放置对象上的脚本) 如果您不是从MonoBehaviour派生出来,那么您可以通过说new Lives()来使用引用该类的标准方式。