Ссылка на кеш-скрипт с Find in Awake работает, в Start нет - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно кэшировать ссылку на другой скрипт в Unity.

Я не понимаю, почему в следующем коде кэширование ссылки в Start () не работает (я получаю исключение NullReferenceException), а кэширование ссылки в Awake () работает.

Насколько я понимаю, Start () получил название AFTER Awake (). Но из того, что я вижу, когда Start () вызывается, объект AnotherScript еще не существует, в то время как он завершается, когда вызывается Awake ().

Чего мне не хватает?

void Start()
{
    anotherscript = GameObject.Find("AnotherScript").GetComponent<AnotherScript>(); // does not work
    MyMethod();
}

void Awake()
{
    anotherscript = GameObject.Find("AnotherScript").GetComponent<AnotherScript>(); // works
}

void MyMethod()
{
    anotherscript.SomeMethod();
}

adasdad

1 Ответ

0 голосов
/ 01 ноября 2018

Очевидно, AnotherScript gameObject не существует в то время, когда вы впервые его ищете. Или он выключен. Или просто его AnotherScript компоненты еще не прикреплены к нему. Это может произойти, если вы создаете его динамически.

Попробуйте исследовать фактическую временную шкалу: поместите некоторые Debug.Log("i am ready " + name, gameObject); в Awake() и Start() методы этого сценария и AnotherScript.

Также вы можете явно изменить порядок выполнения ваших сценариев в Редактировать> Настройки проекта> Порядок выполнения сценариев Делайте это только в том случае, если вы уверены, что ваш сценарий запускается до какого-либо третьего сценария, который создает / настраивает AnotherScript запускается.

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