C#言語による変数の割り当てを理解するためには助けが必要です。変数の割り当てとユニティ
Unity用のMonodevelopを使用してスクリプトを作成している間に、ゲームオブジェクトのRigidBodyとColliderのコンポーネント(その他)をローカル変数に割り当てます。メソッドを呼び出すか属性を変更することによって、これらの変数を変更すると、それらの変更は元のコンポーネントに反映されます。私は以下のこの擬似コードを残しておきます私のポイントをより明確にするには:
void someMethod(Rigidbody rb)
{
Rigidbody localRigidBody;
localRigidBody = rb; //assigned external rb component to local rigidBody
localRigidBody.velocity = 10.0f; //changes are reflected in the original rb object!
}
私を混乱させる何することはRB Rigibodyコンポーネント「を含む」ゲームオブジェクトの変更です。 localRigidBodyはローカル変数であり、localRigidBodyの速度を変更してもrbのベロシティ値は変更してはいけません。しかし、それは変わります、そして、私のプログラムを実行するとき、rbコンポーネントを持つオブジェクトが速度を変えるので、動作します。なぜ私に説明できますか?
私の質問が明確になっていない場合は、私に知らせてください。私は自分自身をより良く表現しようとします。
ありがとうございます。
だと思うを読んで始めるお勧めします。メモリには、インスタンスのフィールドとプロパティが含まれます。 2つの変数があり、 'a'を' b'に代入すると、ポインタは同じメモリセクションに設定されます。 したがって、両方が指すメモリを変更すると、両方とも同じ新しい値になります。 –
@RBので、C#のすべての変数はポインタですか?あなたの答えをありがとう。 – Dayman75
この場合の 'localRigidBody'はその剛体への参照であり、コピーではありません。 'rb.AddForce'のようなものを実行する代わりに、' GameObject.FindWithTag( "Foo")のようなものを書く必要があるので、これはいくつかのキャッシングなどを除いて、いくつかのクオリティオブライフとして見ることができます。 .AddForce() ' –