UnityのVector3について勘違いしていたこと
▶
【Unity】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
UnityのVector3について勘違いしていたこと
今回はコラム的な内容となります。
私自身がUnityのVector3構造体について勘違いしていたことについて書き綴っておきます。
[Unity_317×90]
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】3Dアクションゲームを作ろう!#7 ステージの作成(Skybox・落下判定)
▶
【Unity】3Dアクションゲームを作ろう!#8 ステージの作成(スイッチ・扉)
▶
【Unity】3Dアクションゲームを作ろう!#9 プレイヤーのHP管理
▶
【初心者Unity】JsonUtilityクラスでJSONを扱う方法
▶
【初心者Unity】スクリプトからコンポーネントを追加する方法
ゲーム制作関連のオススメ連載リンク
とっても手軽なゲーム制作体験!
Unityゲーム開発基礎
実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発