FixedUpdate вызывается перед стартом того же MonoBehavior - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть 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 запускается до Start .Это ошибка?

Согласно документации Unity3d :

До первого обновления кадра Начало:

  • Start вызывается перед первым обновлением кадра, только если включен экземпляр скрипта.

Для объектов, добавленных в сцену, функция Start будет вызываться при all для любого из них вызываются сценарии перед обновлением и т. д.Естественно, это не может быть применено, когда объект создается во время игры.

Так что, кажется, выше все сценарии включают в себя "MyMonoBehavior" сам?Таким образом, его FixedUpdate может быть выполнено до его запуска.

Правильно ли мое понимание?Или это ошибка Unity3d?

Моя версия Unity3d - 2017.3.1f1

1 Ответ

0 голосов
/ 13 декабря 2018

Вот почему у вас есть Awake.По сути, вы должны выполнить инициализацию, специфичную для вашего объекта в Awake, и оставить взаимодействие с другими объектами для Start.Awake вызывается как часть процесса создания объекта, поэтому я очень сомневаюсь, что вы столкнетесь с подобными проблемами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...