在我的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;
我有一个空指针异常,所以这是不可理解的?
答案 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()
来使用引用该类的标准方式。