C#

【C#】#2 Vectorクラスとは

ゲームを作る上でよく使うクラスであるVectorクラスについて解説します。

Vectorクラスはキャラクターなどを動かす場合によく使います。イメージを掴んでおきましょう。

Vectorとは

3Dゲームを作る場合、

空間上のどこにオブジェクトを置くのか、どちらの方向に移動するのか、どの方向に力を加えるのか

を設定する必要があります。

それらを決めるために、float型の「x,y,z」の3つの値を扱います。

そこでこれらの値をひとまとめに扱えるようにしたVector3クラス(正確には構造体)が用意されています。

また2Dゲーム用にはfloat型の「x,y」の値を持つVector2クラスが用意されています。

Vector3クラスを擬似的に書くと以下のようになります。

class Vector3
{
    public float x;
    public float y;
    public float z;

    //以下Vector用のメンバメソッドが続く
}

このように、Vector3クラスにはメンバ変数として「x」「y」「z」が、Vector2クラスには「x」「y」が用意されています。

xやyに数値を代入することで、座標やベクトルを表すことができます。

Vectorクラスの使い方

まずは簡単な例を参考にVectorクラスがどのようなものかを見ていきましょう。

Vecor2クラスのメンバ変数に数値を加算する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        Vector2 playerpos = new Vector2(4.0f,6.0f);
        playerpos.x += 6.0f;
        playerpos.y += 5.0f;
        Debug.Log(playerpos);
    }
}

出力結果:(10.0,11.0)

今回は、9行目でvector2クラスの変数「playerPos」を宣言してインスタンス化しています。

Vector2にはxとyのメンバ変数を持っているため、インスタンス化時にfloat型の数値で初期化しています。

メンバ変数である「x」や「y」にアクセスするために、「変数名.x」「変数名.y」と記述しています。

この加算により、例えばキャラクターの移動が実装されます。

ちなみにここで出てきているfはfloat型であることを認識させています

詳しくはこちらを参照してください。

Vecor2クラスのメンバ変数に数値を減算する

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        Vector2 StartPos = new Vector2(10.0f, 9.0f);
        Vector2 EndPos = new Vector2(3.0f, 4.0f);
        Vector2 dir = StartPos - EndPos;

        Debug.Log(dir);

        float len = dir.magnitude;
        Debug.Log(len);
    }
}

出力結果:(7.0,5.0)
        8.602325

このコードではStartPosからEndPosに向かうベクトルdirを求めています。

その後magnitudeメソッドでベクトルdirの長さを求めます。こちらはVector2クラスが持つメンバ変数です。

magnitudeメソッド

ベクトルの長さを求めることができます。つまりは斜めの長さです。

Vectorクラスの応用

ここまでVectorクラスでは座標やベクトルとして扱ってきました。

このほかにもVectorクラスには

加速度や力、移動速度など物理的な力を数値として扱うことができます。

ゲームを作る上で必ず必要になる力であるため使いこなせるようになりましょう。

実際の作り方はもう少し後編でご紹介します。

まとめ

今回は3Dや2Dを表す際に非常に重要になるVectorクラスについて解説していきました。

Vector3が立体Vector2が平面を表しておりそれぞれメンバ変数x,y,zを持っているということがわかりました。

さらに座標で加算や除算ができることに慣れつていきましょう。

最後に出てきたmagnitudeメソッド以外にも便利なメンバ変数が多数存在しますので、出てきた際になんとなくわかるようリファレンスに目を通しておくと良いでしょう。