Unity5学習の際の覚え書き。

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

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

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

Vector3クラスのプロパティ

x ... 横位置を示す値
y ... 縦位置を示す値
z ... 奥行きの位置を示す値

Vector3インスタンスの作成

Vector3 変数 = new Vector3 ( x値, y値, z値 );

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

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

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

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

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

(例)
Translate(new Vector3(1, 2, 3));

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

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

public class myscript : MonoBehaviour {
	//このクラスで使う値をずっと保管しておくフィールド
	//フィールドに保管しておかないとUpdate終了時に消えてしまう
	int counter = 0;
	float plus = 0.1f;

	void Start () {
	}

	void Update () {	
		Vector3 p = new Vector3 (0, 0, plus);
		transform.Translate (p);
		counter++;
		if (counter == 100) {
			counter = 0;
			plus *= -1;
		}
	}
}

positionを設定して動かす

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

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

zvalueの値を0.1ずつ増減してはVector3インスタンスを作成し、transform.positionに代入する、ということをUpdateが呼び出されるごとに行っている。
public class myscript : MonoBehaviour {
	float zvalue = 0f;
	int plusminus = 1;

	void Start () {
	}

	void Update () {
		zvalue += 0.1f * plusminus;
		Vector3 p = new Vector3 (0, 0, zvalue);
		transform.position = p;
		if (zvalue > 10) {
			plusminus = -1;
		}
		if (zvalue < 0) {
			plusminus = 1;
		}
	}
}

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

「向き」に関するプロパティ。
値はVector3インスタンス。
向きを変更する、つまり「回転させる」には、下記の二つの方法がある。
  • rotationの値に新しいVector3インスタンスを設定する
  • Rotateというメソッドを使う

<動かしたいGameObjectのTransformインスタンス>.Rotate (動かす角度をまとめたVector3インスタンス);

回転させるスクリプト

public class myscript : MonoBehaviour {

	void Start () {
	}

	void Update () {
		var v = new Vector3 (0.1f, 0.1f, 0.1f);
		transform.Rotate (v);
	}
}

Vector3

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

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

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

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

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

	void Start () {
	}

	void Update () {
		Vector3 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

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