UnityのVector3について勘違いしていたこと


UnityのVector3について勘違いしていたこと


今回はコラム的な内容となります。
私自身がUnityのVector3構造体について勘違いしていたことについて書き綴っておきます。

Vector3構造体では、3次元座標系における各次元の成分を(X, Y, Z)としてベクトルを表現することができ、
Transformのpositionや、RigidbodyのvelocityなどUnity内の様々な個所で用いられています。

そしてこのTransform.positionなどは、以下のように各成分を直接変更することはできません。

	void Start() {
		transform.position.x = 3.0f;        // ← コンパイルエラーとなる
		transform.position.y = 4.0f;        // ← コンパイルエラーとなる
		transform.position.z = 5.0f;        // ← コンパイルエラーとなる

		Debug.Log(transform.position.x);	// Readは可

	}

Unity始めたての頃に、この仕様に引っかかった人も多いのではないでしょうか。
読み込みはできるのに、変更はできないのかよ!…的な感じで。

ちなみにこの場合、正攻法の例としては

	void Start() {
		transform.position = new Vector3(3.0f, 4.0f, 5.0f);
	}

上記の様に new キーワードを使用して、新たにVector3の構造体を生成すると同時に各成分に値をセットします。
一般の書籍でもこの記述を一番よく見かける気がします。

ここまで学習した段階で私は、「ああ、Vector3の各成分は直接変更できないんだな~」と思いました。
つい先日までずっとそう信じてました。(3人くらいに言っちゃった気もします。)

ええ、勘違いでした。

勘違いに気づいたきっかけは、Unity関連の記事で見かけた以下のような記述です。

	void Start() {
		Vector3 myPositon;

		myPositon.x = 3.0f;
		myPositon.y = 4.0f;
		myPositon.z = 5.0f;

		transform.position = myPositon;
	}

これを見たとき「コンパイルエラーになるんじゃ・・・?」と思いましたが、問題ないんですねコレ。
結構な衝撃でしたが、これを知らなかったから何か損をしていたかというと、別に。なのでいいのですが。

結論
Vector3の各成分は直接変更できる!
※ただし、コンポーネント内で使用されているVector3型はその限りではない!

以上、勘違いの話でした。

今月の新着記事

【Unity認定試験対策】業界情報のチャプターで出題される用語の解説
【解けないとマズいレベルの練習問題】C# 練習問題 8
【Unity認定試験対策】Unity 練習問題 11 - Animator -
【Unity認定試験対策】Unity 練習問題 12 - Navmesh -

記事一覧にもどる

  • このエントリーをはてなブックマークに追加

PAGE TOP