うさがにっき

読書感想文とプログラムのこと書いてきます

Unityのスクリプトを使ってComponentを操作する

概要

UnityスクリプトでComponentを操作する
Componetとはゲームオブジェクトが持つ様々な属性のこと(Rigidbody 2Dとか)

  • MonoBehaviourとはゲームオブジェクトをコントロールするためのクラス
  • GetComponentでゲームオブジェクトの持つComponentを取得できる
  • AddComponentでゲームオブジェクトにComponentを追加できる
  • nstantiateでゲームオブジェクトを作成する
  • 様々なcallback関数を使ってみる

詳細

MonoBehaviourクラス

ゲームオブジェクトに対するスクリプトを作成する場合、自動的に親クラスとなるのが「MonoBehaviour」クラス
これはスクリプト内でゲームオブジェクトを操作できるようになっているクラス

例えばゲームオブジェクトを座標を管理するtransform変数は以下のように使える

	Vector3 p = transform.position;
	p.x = 10;
	transform.position = p;

これは「MonoBehaviour」クラスが良い感じにtransform変数を管理してくれているから
ゲームオブジェクトに紐付いたComponentの値を変更したりも出来る。

	Rigidbody2D r = transform.rigidbody2D;
	r.gravityScale = 1.0f;

GetComponent関数

対象のゲームオブジェクトに設定されているComponentを取得することが出来る

	Rigidbody2D r = GetComponent(typeof(Rigidbody2D)) as Rigidbody2D;
	r.gravityScale = 1.0f;

AddComponent関数

対象のゲームオブジェクトにComponentを追加することも出来る

	gameObject.AddComponent(typeof(Rigidbody2D));

Instantiate関数

ゲームオブジェクトを生成する際に使われるのがInstantiate関数
同じ機能を持つゲームオブジェクトを複製する場合などによく使う

同じゲームオブジェクトを複製する場合、Prefabをあらかじめ作っておくと便利

Prefab作成

  • Asset内で右クリック、Create>Prefabを選択

f:id:tiro105:20140628160705p:plain

f:id:tiro105:20140628160719p:plain

  • 空のゲームオブジェクトを追加、そのゲームオブジェクトにMy Componentを追加する

f:id:tiro105:20140628160746p:plain
f:id:tiro105:20140628160816p:plain

f:id:tiro105:20140628160834p:plain

以下のスクリプトでゲームオブジェクトを量産できる

	public GameObject unityChanPrefab;

	// Use this for initialization
	void Start () {
		for (int i = 0; i < 10; i++) {
			GameObject unityChan = (GameObject)Instantiate(unityChanPrefab);
			Vector3 p = unityChan.transform.position;
			p.x = i * 2;
			unityChan.transform.position = p;
		}
	}

量産されたUnityちゃん
f:id:tiro105:20140628160932p:plain

コールバック関数

ゲームオブジェクトに対して様々なコールバック関数が用意されている
例えばマウスダウンイベントを拾う、OnMouseDown関数など

	void OnMouseDown() {
		Destroy (gameObject);
	}

これでマウスダウン時にgameObjectが破棄される

他にも色々ある
Unity - Scripting API: MonoBehaviour