2015-11-18 2 views
1

я объявляю переменный класс следующим образом (один из MecAnim костей, которые я хочу лечить иначе позже):используя переменный класс в LateUpdate()

private Transform specialBone; 

Затем я инициализировать его Start() следующим образом:

specialBone = transform.Find("Pelvis/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftHand"); 

Наконец, я пытаюсь сделать что-то в LateUpdate(), чтобы увидеть какой-то эффект (я только узнать, что я могу сделать в LateUpdate() изменить материал происходит в Update() и т.д. ...):

void LateUpdate() 
{ 
    specialBone.position = specialBone.position + new Vector3(0f, 1f, 0f); 
} 

Однако я получаю сообщение об ошибке NullReferenceException: Object reference not set to an instance of an object на LateUpdate() линии ...

Что я отсутствующий или делаю неправильно, что specialBone еще null?

ответ

2

Сначала измените переменную specialBone на общедоступную и посмотрите в редакторе, если он нашел преобразование, которое, по моему мнению, не может (поэтому нулевая ссылка), потому что запуск запускается первым. CHECK орфографию в иерархии и убедитесь, что вы не пропустили внутренний родитель.

+0

Вы правы - он не мог найти его для переменной 'public' class, но означает ли это, что я должен поместить все' transform.Find ("Пелвис/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftHand") 'в раздел переменных переменных? Любая работа вокруг, чтобы аккуратно определить ее в 'Start'? – Joshua

+2

вы не можете использовать функцию «Найти» в разделе переменных (btw не называемый раздел переменной). Самый простой и быстрый способ - создать публичный varaible - >> public transform specialBone, а затем перетащить объект из иерархии в файл сценария в редакторе. Тем не менее, как вы это делаете, также правильно, но я думаю, что вы пропустили вложенность уровня или некоторой орфографической ошибки. Другой способ, которым вы можете это сделать, - >> [SerializeField] и определить под ним частные переменные, и они появятся в редакторе. – LumbusterTick

Смежные вопросы