1

所以我目前正在使用 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 : Object reference not set to an instance of an object

我检查了“chosenProj”游戏对象并为其分配了弹丸模型,但仍然出现此错误。弹丸不会向前飞,我感到很愚蠢,因为我已经和unity一起工作了一个月了

知道为什么吗?

THX b4

4

1 回答 1

4

你的代码,你NullReferenceException在最后一行得到一个:

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

在最后一行中,某些东西必须是null,否则您将不会得到异常。由于frontDirVector3值类型,唯一可以是的引用类型nullshotProj.

怎么可能null?好吧,当 的返回值Instantiate()不能转换为 aRigidbody时,as Rigidbody表达式将返回null


因此,我得出结论,您chosenProj不是RigidBody. 它实际上是一个GameObject上面有一个刚体组件。要获得RigidBody,请使用以下命令:

GameObject shotProj = (GameObject)Instantiate(chosenProj, transform.position, transform.rotation);
shotProj.rigidbody.AddForce(frontDir);

GameObject文档有更多关于如何从游戏对象中获取组件的信息。

于 2013-03-15T11:23:41.450 回答