2Dゲームにおいて位置を扱うpositionプロパティに設定されているのは、「Vector2」というクラスのインスタンス。
二次元に関する値はVector2を使えばだいたいOKらしい。
二次元に関する値はVector2を使えばだいたいOKらしい。
GameObjectのpositionのx、yなどの値を変更しても、GameObjectの位置は変わらない。
tansform.position.xの値を変更してもX軸の位置は移動しない。
positionの値は、現在の位置をリアルタイムに管理する機能を持っていないので。
単に「今の値を取り出すだけ」。
動かす方法は二つあり、一つは「Translate」メソッドを使うこと。
※Vector2に設定するのは、「移動する位置」ではなくて、「移動する幅」である。
tansform.position.xの値を変更してもX軸の位置は移動しない。
positionの値は、現在の位置をリアルタイムに管理する機能を持っていないので。
単に「今の値を取り出すだけ」。
動かす方法は二つあり、一つは「Translate」メソッドを使うこと。
<GameObjectのTransformインスタンス>.Translate(<動かす幅をまとめたVector2インスタンス>); (例) Translate(new Vector2(1, 2));
※Vector2に設定するのは、「移動する位置」ではなくて、「移動する幅」である。
public class myscript : MonoBehaviour { //このクラスで使う値をずっと保管しておくフィールド //フィールドに保管しておかないとUpdate終了時に消えてしまう int counter = 0; float plus = 0.1f; void Start () { } void Update () { Vector2 p = new Vector2 (0, plus); transform.Translate (p); counter++; if (counter == 100) { counter = 0; plus *= -1; } } }
positionプロパティに設定されているVector2の値(x, y)を変更してもゲームオブジェクトは動かないが、Vector2インスタンスを用意してpositionプロパティのインスタンスそのものを変更してしまえば、ちゃんとそれにあわせて位置も変更される。
zvalueの値を0.1ずつ増減してはVector2インスタンスを作成し、transform.positionに代入する、ということをUpdateが呼び出されるごとに行っている。
public class myscript : MonoBehaviour { float zvalue = 0f; int plusminus = 1; void Start () { } void Update () { xvalue += 0.1f * plusminus; Vector2 p = new Vector2 (xvalue, 0); transform.position = p; if (xvalue > 10) { plusminus = -1; } if (xvalue < 0) { plusminus = 1; } } }
「向き」に関するプロパティ。
値はVector2インスタンス。
向きを変更する、つまり「回転させる」には、下記の二つの方法がある。
値はVector2インスタンス。
向きを変更する、つまり「回転させる」には、下記の二つの方法がある。
- rotationの値に新しいVector2インスタンスを設定する
- Rotateというメソッドを使う
<動かしたいGameObjectのTransformインスタンス>.Rotate (動かす角度をまとめたVector2インスタンス);
public class myscript : MonoBehaviour { void Start () { } void Update () { var v = new Vector2 (0.1f, 0.1f); transform.Rotate (v); } }
Vector2は、位置を指定するものというわけではない。
Vector2に保管されるx, yの各値は、単なる値に過ぎず、これを受け取ったメソッドやプロパティがどう解釈するかで、それが「位置の値」となったり、「回転する角度」を示すものとして扱われる。
Vector2に保管されるx, yの各値は、単なる値に過ぎず、これを受け取ったメソッドやプロパティがどう解釈するかで、それが「位置の値」となったり、「回転する角度」を示すものとして扱われる。
localScaleは、大きさに関するプロパティ。
Vector2インスタンスを値として保管している。
大きさについては、位置や向きのように「決まっただけ大きくする」といったメソッドは用意されていないので、大きさを変更した場合には、localScaleプロパティに新たなVector2インスタンスを設定すること。
Vector2インスタンスを値として保管している。
大きさについては、位置や向きのように「決まっただけ大きくする」といったメソッドは用意されていないので、大きさを変更した場合には、localScaleプロパティに新たなVector2インスタンスを設定すること。
コメントをかく