Unity3d 在unity中射击射弹总是返回空异常

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

所以我目前正在使用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:对象引用未设置为对象的实例

我已经检查了“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有很多虚拟链接,值得选择答案。。。。