Unity3d 在LateUpdate()中使用类变量

Unity3d 在LateUpdate()中使用类变量,unity3d,Unity3d,我声明了一个类变量,如下所示(我想稍后以不同方式处理的MecAnimbones之一): 然后,我在Start()中初始化它,如下所示: specialBone = transform.Find("Pelvis/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftHand"); 最后,我尝试在LateUpdate()中做一些事情,以查看效果(我只是在学习LateUpdate()中可以做些什么来修改Update()等中发生的内容): 但是,我在LateUpdate

我声明了一个类变量,如下所示(我想稍后以不同方式处理的
MecAnim
bones之一):

然后,我在
Start()
中初始化它,如下所示:

specialBone = transform.Find("Pelvis/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftHand");
最后,我尝试在
LateUpdate()
中做一些事情,以查看效果(我只是在学习
LateUpdate()
中可以做些什么来修改
Update()
等中发生的内容):

但是,我在
LateUpdate()
行上收到
NullReferenceException:objectreference未设置为对象实例的错误消息


如果
specialBone
仍然是
null
,我遗漏了什么或做错了什么?

首先将变量specialBone更改为public,并在编辑器中查看它是否找到了我认为它无法找到的转换(因此为null引用)因为start首先运行。请检查层次结构中的拼写,确保没有遗漏内部父级。

您是对的--
public
类变量找不到它,但这是否意味着我应该将整个
transform.find(“骨盆/左肩/左上臂/左下臂/左手”)
在类变量部分?在
Start
中灵活定义它的任何变通方法?您不能在变量部分使用Find函数(顺便说一句,它不是变量部分)。最简洁快速的方法是定义一个public varaible->>public transform specialBone,然后在编辑器中将对象从继承人拖动到脚本文件中。尽管如此,您这样做也是正确的,但我认为您错过了嵌套级别或拼写错误。另一种方法是->>[SerializeField]并在其下定义私有变量,它们将显示在编辑器中。
specialBone = transform.Find("Pelvis/LeftShoulder/LeftUpperArm/LeftLowerArm/LeftHand");
void LateUpdate()
{
    specialBone.position = specialBone.position + new Vector3(0f, 1f, 0f);
}