我在Unity中创建2D宇宙飞船游戏。我有一个标题为“Player”的对象,并附有此脚本。在脚本中,我代表游戏者的船这个类:List.Count引发空引用异常
public class Ship : MonoBehaviour
{
public List<Weapon> weaponsList;
void Start()
{
weaponsList = new List<Weapon>();
weaponsList.Add(new Weapon());
weaponsList.Add(new Weapon());
}
}
这个阶级(在同一脚本中)代表一种武器:
public class Weapon
{
//properties here
}
现在,当我尝试引用weaponsList得到List.Count使用此代码(来自不同的脚本),它抛出一个NullReferenceException,称未将对象引用设置到对象的实例:
Ship ship = GameObject.Find("Player").GetComponent<Ship>();
if (ship.weaponsList.Count >=2)
{
//do stuff
}
但船上其他财产我尝试访问作品很好。有人可以帮忙吗?如果您需要其他上下文或代码,请告诉我,我会进行必要的修改。
编辑:启动方法是Unity特有的,并且在脚本初始化时始终默认调用。
这解决了这个问题。我对这个问题做了一个编辑,说明在脚本初始化之前,Unity总是调用Start()方法,所以我认为它的工作方式与构造函数相同。感谢您的建议。 –
该解决方案导致'weaponList'被初始化两次。如果在调用'Start()'方法之前有'weaponList'做了任何事情,这会导致奇怪的行为。最好从'Start()'方法中移除第二次初始化,并且最好确保'weaponList'只能在“Ship”类中初始化一次和/或仅在内部初始化。 –