在启动相同MonoBehavior之前调用FixedUpdate

时间:2018-12-13 07:07:38

标签: unity3d

我的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 开始之前运行。是一个错误吗?

根据Unity3d documentation

  

第一帧更新之前,开始:

     
      
  • 在第一个开始之前调用开始   仅在启用脚本实例的情况下更新框架。
  •   
     

对于添加到场景中的对象,将调用“开始”功能   更新之前的所有脚本等将被调用。自然,   在以下情况下实例化对象时无法强制执行此操作   游戏性。

因此,似乎所有所有脚本都包含“ MyMonoBehavior”自身?因此,可以在开始之前执行其FixedUpdate。

我的理解正确吗?还是这是Unity3d的错误?

我的Unity3d版本是2017.3.1f1

1 个答案:

答案 0 :(得分:1)

这就是为什么您拥有Awake。基本上,应该对Awake中的对象进行特定的初始化,并为Start保留与其他对象的交互。 Awake被称为对象实例化过程的一部分,因此我非常怀疑您是否会遇到类似的问题。