错误描述:
在一个脚本(
Bird.css
)中对一个public的变量使用[HideInInspector](
[HideInInspector]使变量不显示在 Inspector 中,但进行序列化。
),该变量用于获取2D物体的
SpringJoint2D
组件。在另一个脚本(GameManager.css)中引用该组件变量。运行游戏时,出现该变量值未获取错误。
定义:
//Bird.css
//获取spring joint 2D组件
//[HideInInspector]使变量不显示在 Inspector 中,但进行序列化。
[HideInInspector]
public SpringJoint2D sp;
引用:
//GameManager.css
void Instante()
{
...
birds[i].sp.enabled = false;
...
}
出错原因:
由于Instante()方法需要一开始就要调用一次,因此将调用语句写在了start()中,而SpringJoint2D的获取也定义在了start()中。
//Bird.css
void Start()
{
sp = GetComponent<SpringJoint2D>();
...
}
//GameManager.css
void Start()
{
//初始化
Instante();
}
start()方法是在update()之前调用一次,两个脚本的start()都在开始时就执行了,最终导致Instante()方法执行时,GameManager.css未获得在Bird.css中获取的SpringJoint2D组件。
解决方法:
Awake()方法在unity中最早调用,因此可以将SpringJoint2D组件的获取放到Awake()中,Instante()方法继续放在start()中。
//Bird.css
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
}
版权声明:本文为qq_42540393原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。