Unity3d 在unity中射击射弹总是返回空异常
所以我目前正在使用unity3D进行我的游戏项目,我遇到了一个奇怪的错误 我正在尝试实例化并向前发射一枚射弹。这是我的更新代码:Unity3d 在unity中射击射弹总是返回空异常,unity3d,nullreferenceexception,rigid-bodies,projectile,Unity3d,Nullreferenceexception,Rigid Bodies,Projectile,所以我目前正在使用unity3D进行我的游戏项目,我遇到了一个奇怪的错误 我正在尝试实例化并向前发射一枚射弹。这是我的更新代码: if (Input.GetButtonUp("Fire1")){ Vector3 frontDir = transform.TransformDirection(Vector3.forward * arrowShotForce); if (chosenProj){ Rigidbody shotProj = In
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:对象引用未设置为对象的实例
我已经检查了“chosenProj”游戏对象,并为其分配了一个投射物模型,但仍然出现了这个错误。炮弹飞不动了,我觉得自己好笨,因为我已经和unity一起工作了一个月了
知道为什么吗
THX b4您的代码,您在最后一行中得到一个
NullReferenceException
:
Rigidbody shotProj = Instantiate(
chosenProj, transform.position, transform.rotation)
as Rigidbody;
shotProj.AddForce(frontDir);
在最后一行中,某些内容必须是null
,否则将不会得到异常。由于frontDir
是Vector3
值类型,因此null
只能是shotProj
它怎么可能是空的?当然,当Instantiate()
的返回值不能转换为刚体时,as Rigidbody
表达式将返回null
因此,我得出结论,你的chosenProj
不是一个刚体。它实际上是一个游戏对象
,上面有一个刚体组件。要获取刚体
,请使用以下命令:
GameObject shotProj = (GameObject)Instantiate(chosenProj, transform.position, transform.rotation);
shotProj.rigidbody.AddForce(frontDir);
文档提供了有关如何从游戏对象中获取组件的更多信息。您的代码,在最后一行中,您将获得一个NullReferenceException
:
Rigidbody shotProj = Instantiate(
chosenProj, transform.position, transform.rotation)
as Rigidbody;
shotProj.AddForce(frontDir);
在最后一行中,某些内容必须是null
,否则将不会得到异常。由于frontDir
是Vector3
值类型,因此null
只能是shotProj
它怎么可能是空的?当然,当Instantiate()
的返回值不能转换为刚体时,as Rigidbody
表达式将返回null
因此,我得出结论,你的chosenProj
不是一个刚体。它实际上是一个游戏对象
,上面有一个刚体组件。要获取刚体
,请使用以下命令:
GameObject shotProj = (GameObject)Instantiate(chosenProj, transform.position, transform.rotation);
shotProj.rigidbody.AddForce(frontDir);
文档中有更多关于如何从游戏对象中获取组件的信息。OMG,这就是它不起作用的原因。。。THX很多虚拟链接,值得选择答案…天哪,这就是为什么它不起作用。。。THX有很多虚拟链接,值得选择答案。。。。