• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UnityC#の質問です!)

UnityC#のブロック配置スクリプトで参照渡しの挙動について

このQ&Aのポイント
  • Vector3 position = block.transform.positionで参照を渡しているため、block.transform.position = position;が必要ないと思いましたが、同じ位置にブロックが生成されました。
  • 参照を渡しているため、position.x = -(BLOCK_NUM_X/2.0f - 0.5f) + x;とposition.y = -0.5f - y;でblock.transform.positionの中身が書き換わっていると思いましたが、違うようです。
  • なぜ同じ位置にブロックが生成されるのか、参照渡しの挙動について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

Unityのリファレンスを見たところ、Vector3はクラスではなく構造体のようです。 https://docs.unity3d.com/Documentation/ScriptReference/Vector3.html 構造体は値型であるため、 他の変数に代入する際は「参照のコピー」ではなく「値のコピー」となります。 例) struct Point{  public int x;  public int y;  public string ToString(){   return string.Format("x={0}, y={1}",x, y);  } } Point p1 = new Point(); Debug.Log(p1.ToString()); //x=0, y=0 Point p2 = p1; p2.x = 1; p2.y = 2; Debug.Log(p1.ToString()); //x=0, y=0 ←「値のコピー」なので、p2のプロパティを変えてもp1には影響しない Debug.Log(p2.ToString()); //x=1, y=2

omoumou13
質問者

お礼

回答ありがとうございます! なるほど! 勝手にクラスだと思ってました。

関連するQ&A