我的MonoBehavior的行为如下:
public class MyMonoBehavior : MonoBehaviour
{
private Rigidbody m_Rigidbody;
private void Start()
{
m_RigidBody = GetComponent<Rigidbody>();
}
private void FixedUpdate()
{
m_Rigidbody.AddForce(Vector3.one); // May throw NullRefrenceException
}
}
MyMonoBehavior附加到在运行时创建的GameObject。
有时,m_Rigidbody.AddForce(Vector3.one);
会引发NullRefrenceException。
似乎 FixedUpdate 在开始之前运行。是一个错误吗?
第一帧更新之前,开始:
- 在第一个开始之前调用开始 仅在启用脚本实例的情况下更新框架。
对于添加到场景中的对象,将调用“开始”功能 更新之前的所有脚本等将被调用。自然, 在以下情况下实例化对象时无法强制执行此操作 游戏性。
因此,似乎所有所有脚本都包含“ MyMonoBehavior”自身?因此,可以在开始之前执行其FixedUpdate。
我的理解正确吗?还是这是Unity3d的错误?
我的Unity3d版本是2017.3.1f1
答案 0 :(得分:1)
这就是为什么您拥有Awake
。基本上,应该对Awake
中的对象进行特定的初始化,并为Start
保留与其他对象的交互。 Awake
被称为对象实例化过程的一部分,因此我非常怀疑您是否会遇到类似的问题。