UnityEventについて


Unity4.6からuGUIが追加された際に、UnityEventというイベントシステムも追加されました。
uGUIと同時に追加されたので、uGUIで扱うイベントシステム系かと思ってしまいますがあらゆる場面で利用ができます。
以前、イベントについてどのようなやり方がいいか試してみたんですが、その際に作ったものにUnityEventでのやり方を追加してみました。

>>サンプルプロジェクトダウンロード

追加した主なソースを抜き出すと

// UIManager側

using UnityEngine.Events;

/**
 * UnityEventの用意。
 */
public UnityEvent rotateEvent;

// UnityEventの発行
this.rotateEvent.Invoke();

// イベントを受けるUnityEventTest側

using UnityEngine;
using System.Collections;

/// <summary>
/// UnityEventを受け取るテスト。
/// </summary>
public class UnityEventTest : MonoBehaviour {
	/// <summary>
	/// UIManager.
	/// </summary>
	UIManager uiManager;

	/// <summary>
	/// Awake.
	/// </summary>
	public void Awake() {
		this.uiManager = GameObject.Find("UIManager").GetComponent<UIManager>();
	}

	/// <summary>
	/// キューブを回転させる。
	/// </summary>
	public void RotateCube() {
		this.transform.Rotate(0, 10, 0);

		if (this.transform.rotation.eulerAngles.y >= 60) {
			this.uiManager.rotateEvent.RemoveListener(this.RotateCube);
			Destroy(this.gameObject);
		}
	}
}

これだけで実装できました。
今回イベントの追加はインスペクター上で、イベントの削除はソース上(RemoveListener)で行いました。
event EventHandlerよりも容易に扱えます。
イベントを登録しているGameObjectが破棄されるとUnityEvent側から勝手に破棄されているので、ひょっとしたらRemoveListenerしなくても自動で行われるのかもしれません。(未確認)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です