最近は、Unityでゲームを作る事が多く、その中で頻繁に出てくるのがVectorクラスです。
キャラクターを登場させて、動かそうと思ったらVectorを使うことになるので基本的な使い方をマスターしておく必要があります。
今回は、Vectorクラスの使い方について紹介します。
Vectorクラスについて
Vectorとは
3Dゲームを作る場合、どこにキャラクターを配置するのか、どの方向に移動するのかなどを決めるために、float型の「x」「y」「z」の値を使います。2Dだと「x」と「y」ですね。
これらの値をまとめたのがVectorクラスです。
もっと細かく言うと、3DだとVector3クラス、2DだとVector2クラスになります。
専門的な話になると、構造体と言って、変数とメソッドをまとめる仕組みです。クラスより高速に動きますが、使える機能に制限があります。
プログラマー向け数学の本には、びっしりVectorの事について書かれているので、基礎からがっつり勉強したい人は是非読んでみてください。
それぞれのクラスには、メンバ変数が用意されていて、座標やベクトルとして使うことになります。
例えば、「x=3」「y=2」という値を座標にした場合は、(3,2)という位置にキャラクター等が配置させることになります。
上の画像のようなイメージです。
黒丸の位置に何かしらのオブジェクトが配置されるわけですね。
次に、ベクトルとして使う場合ですが、「x=3」「y=2」では、現在地から「x方向に3」「y方向に5」進むことを意味します。
先ほどの黒丸を現在地とすると上図のようになりますね。
座標として使うのか、ベクトルとして使うのかで全然意味が異なるので、しっかり使い分けるようにしましょう。
Vectorクラスの使い方
スクリプトにするとどのような記述になるのか確認しましょう。
これは、Vector2クラスのメンバ変数に数値を加算するスクリプトです。
まずは、Vector2クラスの変数である「CharaPosition」を宣言します。キャラクターのポジションを表しています。
次に、new Vector2(3.0f,2.0f)でインスタンスを作成して代入します。先ほど説明した通りVector2クラスはメンバ変数にfloat型の「x」と「y」を持っているので、引数は「3.0f」と「2.0f」になるわけです。
メンバ変数「x」「y」にアクセスする場合は、「変数名.x」「変数名.y」と記述することでアクセス出来ます。
上のスクリプトの場合は「CharaPosition.x」「CharaPosition.y」といった感じです。
これを利用して11行目と12行目で、それぞれの座標を指定した値で増加しています。
それぞれの値を増加させているので、キャラクターは右上に移動することになります。
逆に、値を減少させると、キャラクターは左下に動きますね。
Vector2同士の減算でベクトルを求めるスクリプト
やや応用になりますが、減算が出来たり、座標からベクトルを求める事も出来ます。
このスクリプトは、「start」から「goal」に向かうベクトル「dir」を求めています。
要するに、goal地点からstart地点を減算すれば良いわけです。
12行目で減算し、その結果を「dir」に代入します。dirは(6.0,3.0)になります。
続いて14行目で、Vector2クラスが持つmagnitudeメンバ変数を使って「dir」の長さを求めています。このmagnitudeがとても便利で、なんとベクトルの長さを返してくれます。
最初に減算を行い、座標を取得することで、ベクトルの長さが求められるわけですね。
他にも、発想次第でさまざま使い方が出来るのがVectorクラスなので、リファレンスを参考に試行錯誤してみてはいかがでしょうか。