所以我目前正在使用unity3D处理我的游戏项目,我遇到了这个奇怪的错误。
我正在尝试实例化并射击一个射弹。这是我的更新代码:
if (Input.GetButtonUp("Fire1")){
Vector3 frontDir = transform.TransformDirection(Vector3.forward * arrowShotForce);
if (chosenProj){
Rigidbody shotProj = Instantiate(chosenProj, transform.position, transform.rotation) as Rigidbody;
shotProj.AddForce(frontDir);
}
}
当我尝试播放脚本时,它在 shotProj.AddForce(frontDir)时出错 NullReferenceException:对象引用未设置为对象的实例
我已经检查过'selectedProj'游戏对象,并为它分配了一个射弹模型,但我仍然遇到了这个错误。抛射物不会向前飞,而我感到非常愚蠢,因为我已经和团结一起工作了一个月了
任何想法为什么?
THX b4
答案 0 :(得分:4)
您的代码,您在最后一行获得NullReferenceException
:
Rigidbody shotProj = Instantiate(
chosenProj, transform.position, transform.rotation)
as Rigidbody;
shotProj.AddForce(frontDir);
在最后一行中,某些内容必须为null
,否则您将无法获得异常。由于frontDir
是Vector3
值类型,因此唯一可以是null
的引用类型为shotProj
。
怎么可能null
?好吧,当Instantiate()
的返回值无法转换为Rigidbody
时,as Rigidbody
表达式将返回null
。
因此,我得出结论,您的chosenProj
不 a RigidBody
。它实际上是一个GameObject
,上面有一个刚体组件。要获取RigidBody
,请使用此选项:
GameObject shotProj = (GameObject)Instantiate(chosenProj, transform.position, transform.rotation);
shotProj.rigidbody.AddForce(frontDir);
GameObject
class文档提供了有关如何从游戏对象中获取组件的更多信息。