Unity5学習の際の覚え書き。

×

位置・向き・大きさを管理するTransform

位置を扱う「position」プロパティ

2Dゲームにおいて位置を扱うpositionプロパティに設定されているのは、「Vector2」というクラスのインスタンス。
二次元に関する値はVector2を使えばだいたいOKらしい。

Vector2クラスのプロパティ

x ... 横位置を示す値
y ... 縦位置を示す値

Vector2インスタンスの作成

Vector2 変数 = new Vector2 ( x値, y値 );

2次元それぞれの方向の値を引数で指定する。
指定する値はfloat。

移動の基本は「Translate」メソッド

GameObjectのpositionのx、yなどの値を変更しても、GameObjectの位置は変わらない。
tansform.position.xの値を変更してもX軸の位置は移動しない。
positionの値は、現在の位置をリアルタイムに管理する機能を持っていないので。
単に「今の値を取り出すだけ」。

動かす方法は二つあり、一つは「Translate」メソッドを使うこと。

<GameObjectのTransformインスタンス>.Translate(<動かす幅をまとめたVector2インスタンス>);

(例)
Translate(new Vector2(1, 2));

※Vector2に設定するのは、「移動する位置」ではなくて、「移動する幅」である。

行ったり来たりするスクリプト (Translate)

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を設定して動かす

positionプロパティに設定されているVector2の値(x, y)を変更してもゲームオブジェクトは動かないが、Vector2インスタンスを用意してpositionプロパティのインスタンスそのものを変更してしまえば、ちゃんとそれにあわせて位置も変更される。

行ったり来たりするスクリプト (positionのVector2の再設定)

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;
		}
	}
}

rotationプロパティとRotationメソッド

「向き」に関するプロパティ。
値は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は、位置を指定するものというわけではない。
Vector2に保管されるx, yの各値は、単なる値に過ぎず、これを受け取ったメソッドやプロパティがどう解釈するかで、それが「位置の値」となったり、「回転する角度」を示すものとして扱われる。

大きさと「localScale」プロパティ

localScaleは、大きさに関するプロパティ。
Vector2インスタンスを値として保管している。
大きさについては、位置や向きのように「決まっただけ大きくする」といったメソッドは用意されていないので、大きさを変更した場合には、localScaleプロパティに新たなVector2インスタンスを設定すること。

縦横に変形するスクリプト

public class myscript : MonoBehaviour {
	float dx = 0.01f;
	float dy = -0.01f;

	void Start () {
	}

	void Update () {
		Vector2 s = transform.localScale;
		if (s.x > 3 || s.x < 0.1){
			dx *= -1;
		}
		if (s.y > 3 || s.y < 0.1){
			dy += -1;
		}
		s.x += dx;
		s.y += dy;
		transform.localScale = s;
	}
}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】
Wiki記法ガイド

リンク

ゲームバー大阪心斎橋

ゲームバー大阪梅田

ゲームバー大阪心斎橋

ダーツ&ダイニングバー大阪梅田

メニュー

Unity


スマホ操作

Unity - GameObject

Unity - 3DCG

メンバーのみ編集できます