【Unity4.6beta】新イベント機能使ってみた

Unity4.6のオープンベータが公開されました。
http://unity3d.com/unity/beta/4.6
一番注目されるのはuGUIだと思いますが、ぱっと触ってみた感じNGUIユーザーはあわてて移行する必要もなさそうかなーという感じだったので、
uGUI以外で使えそうな機能をちょっと使ってみたいと思います。

まずは、SendMessageに代わるイベントシステムが追加されたようなので使ってみました。

※Unity4.6betaが公開されたのがつい先ほどのため、リファレンスもなしにとりあえず触ってみてる感じです。
より良い方法があるかもしれないので、あくまで参考までに。

ひとまずテストということで、以下のようなスクリプトを書いてみました。

using UnityEngine;
using UnityEngine.Events;
using System.Collections;

public class EventTest : MonoBehaviour
{
	public UnityEvent _Event;
	public float _Wait;

	// Use this for initialization
	IEnumerator Start ()
	{
		while( true )
		{
			_Event.Invoke();
			yield return new WaitForSeconds( _Wait );
		}
	}
}

UnityEngine.EventsネームスペースにUnityEventクラスが追加されていたのでとりあえずどんなものか使ってみた感じです。
このスクリプトを適当なゲームオブジェクトにアタッチすると以下のようなInspectorが表示されます。

SnapCrab_NoName_2014-8-21_3-48-42_No-00

このEvent()の欄が今回追加したUnityEventの設定フィールドのようです。
右下の+ボタンを押すと……

SnapCrab_NoName_2014-8-21_3-50-12_No-00

このようにObjectの設定欄が追加されました。
GameObjectではなくObjectなんですね。

試しに置いてあったArborのGameObjectを設定してNo Functionのところをクリックしてみると、
メソッド以外も選択できるようです。

SnapCrab_NoName_2014-8-21_3-52-53_No-00

ArborFSMのメソッドであるSendTriggerを選択して、Arbor側で確認してみたらちゃんと呼ばれています!

このUnityEventで設定できる項目であれば、メソッド以外も指定できます。
試しにGameObjectのnameを指定するとGameObjectの名前を直接変更できました。

対象がObjectということもあって、下手な使い方をしたらデータを壊しかねないくらい強力なシステムになっていますね。

少なくともSendMessageのために文字列で指定していた箇所はUnityEventに移行してもいいかもしれませんね。

Unityのアセット販売中!

ステートマシンの状態遷移やパラメータはエディタで編集でき、
ゲームロジックに依存するステートの挙動はスクリプトで記述可能なエディタ拡張。

詳細はこちら

RPGツクールVXやWOLF RPGエディターのオートタイルに準拠したエディタ拡張。

詳細はこちら

オススメ!