2016-11-30 3 views
1

В Unity 5.4/5.5 у меня возникла проблема с GetComponent, которая почему-то не возвращает CharacterController моего GameObject. После перезапуска Unity он снова работает.GetComponent return null

enter image description here

_MAIN запускает этот скрипт:

private GameObject frog; 
private CharacterController controller; 

void Start() { 
    frog = GameObject.Find ("Frog"); 
    controller = frog.GetComponent<CharacterController>(); 

    Debug.Log(controller); // returns null 
} 

void Update() { 
    if (controller.isGrounded) { 
     // error is thrown 
    } 
} 

После controller упоминается в обновлении, я получаю ошибку:

MissingComponentException: There is no 'CharacterController' attached to the "Frog" game object,

FYI, frog возвращается в GameObject просто отлично ,

+2

У вас есть другой GameObject под названием «Frog» в вашей сцене? Посмотрите внимательно ... Кроме того, пожалуйста, укажите полный код того, как вы его используете в функции Update. – Programmer

+0

Код останавливается на 'if (controller.isGrounded) {' in Update. – Tom

+0

Вы можете поместить функцию обновления в свой вопрос – Programmer

ответ

3

Вместо использования GameObject.Find("Frog") попробуйте использовать GameObject.FindWithTag("Frog") и добавьте тег "Frog" в объект лягушки.

Причина, по которой вы это испытываете, как-то где-то, второй объект с именем «Лягушка» добавляется в сцену. Когда это произойдет, Unity случайно выбрат один из двух найденных объектов, это заставит его работать иногда, но не в другое время.

Переключившись на тег, вы делаете его более вероятным, чтобы объект был идентифицирован однозначно.

+0

Так же, как я спросил, есть ли у ОП два GameObjects под названием «Лягушка». На это никогда не отвечали. – Programmer

+0

@Программист, считая, что он ответил «GameObject.FindWithTag» («Лягушка»), исправляя проблему в комментариях, когда я спросил его об этом, я думаю, что подразумеваемый ответ на ваш вопрос: «Да, у меня есть две вещи под названием« Лягушка » –

+0

OP ответил 'if (controller.isGrounded) {' на этот вопрос, но да, это исправление проблемы. – Programmer