2016-05-12 5 views
0

正直なところ、このコードの何が間違っているのか分かりません。私はまだ一人で新しいと思う、いくつかの助けを得ることを愛するだろう。rigidbody2Dの単体での問題

void Start() 
{ 
    GameObject objToSpawn; 
    objToSpawn = new GameObject("Obstacle"); 
    objToSpawn.AddComponent<Rigidbody2D>(); 
    objToSpawn.AddComponent<BoxCollider2D>(); 
    objToSpawn.AddComponent<SpriteRenderer>(); 
    Rigidbody2D rigid; 
    rigid = GetComponent<Rigidbody2D>(); 
    rigid.gravityScale = 0; 
    rigid.isKinematic = true; 
    pos = objToSpawn.transform.position; 


} 

プログラムが開始されると、重力スケールは1のままで、キネマティックはまだ偽です。どうして?

+0

'objToSpawn'の' Rigidbody2D'、またはこのスクリプトが添付されているオブジェクトを修正しようとしていますか? – Serlite

+0

それらを変更する 'Update'または' FixedUpdate'をお持ちでないのですか? –

答えて

2

他の回答は正しいです。プレハブを使用し、複雑なオブジェクトを持っているときにインスタンス化する必要があります。あなたが持っているコードがなぜうまくいかないのかを説明します。あなたのエラーは、これは現在のスクリプトが接続されているGameObjectrigidBody2Dを取得するラインに

rigid = GetComponent<Rigidbody2D>(); 

です。私はあなたがする何を意味するのかして推測している:

rigid = objToSpawn.GetComponent<Rigidbody2D>(); 

あなただけobjToSpawnと呼ばれるインスタンス化されたオブジェクト上にあるrigidBody2Dを取得しますどの。

1

プレハブを作成してインスタンス化することをお勧めします。それはあなたがやっているものよりも新しいオブジェクトを作成するより良い方法でしょう。統一文書を開き、そのパラメータを確認してください。

+0

ありがとう! – TheEnthusiast

+0

問題ありません。お気軽にお問い合わせください。しかし、あなたの質問がよりゲーム指向の場合は、ゲーム開発ボードを使用してみてください。 – Fortidune

関連する問題