以统一方式射击抛射物始终返回空例外

时间:2013-03-15 11:18:26

标签: unity3d nullreferenceexception rigid-bodies projectile

所以我目前正在使用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

1 个答案:

答案 0 :(得分:4)

您的代码,您在最后一行获得NullReferenceException

Rigidbody shotProj = Instantiate(
    chosenProj, transform.position, transform.rotation)
    as Rigidbody;
shotProj.AddForce(frontDir);

在最后一行中,某些内容必须为null,否则您将无法获得异常。由于frontDirVector3值类型,因此唯一可以是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文档提供了有关如何从游戏对象中获取组件的更多信息。