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 を使って 1 か月が経ちましたが、発射体は前方に飛ばず、とても馬鹿げています。

理由はありますか?

THX b4

4

1 に答える 1

4

NullReferenceException最後の行でa を取得するコード:

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

最後の行では、何かがnullでなければなりません。そうしないと、例外が発生しません。frontDirは値型であるためVector3、可能な参照型は のみnullですshotProj

どうしてnullですか?の戻り値をInstantiate()にキャストできない場合Rigidbodyas Rigidbody式は を返しnullます。


したがってあなたchosenProjは. 実際には剛体コンポーネントを持つ です。を取得するには、次を使用します。RigidBodyGameObjectRigidBody

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

GameObjectクラスのドキュメントには、ゲーム オブジェクトからコンポーネントを取得する方法に関する詳細情報が含まれています。

于 2013-03-15T11:23:41.450 に答える