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);
}