みかづきブログ その3

3ヶ月つづけてみました。

Unityでインスタンスをまたいでイベントを通知する 引数を必要としないとき編(delegateをつかう)

例えばUIボタンを押したときにSpriteにアタッチしているスクリプトのpublicメソッドを叩きたい時、JavaScriptならEventDispatcherを使ったりしていたんですが、Unityだとどうしたもんかと思っていました。

とりあえずdelegateをつかってイベントを渡してみることにしました。


ButtonController(ボタンにアタッチするスクリプト)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ButtonController : MonoBehaviour {
	public event EventHandler OnClickHandler = delegate {
		Debug.Log ("CLICK!");
	};

	void Start () {

	}

	public void OnClick () {
		this.OnClickHandler (this, EventArgs.Empty);
	}
}
SpriteController(スプライトにアタッチするスクリプト)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteController : MonoBehaviour {
	public void Say () {
		Debug.Log ("Sprite!");
	}
}
GameController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameController : MonoBehaviour {
	[SerializeField]
	private GameObject Button;
	[SerializeField]
	private GameObject Sprite;

	// Use this for initialization
	void Start () {
		Button.GetComponent<ButtonController> ().OnClickHandler += delegate {
			Sprite.GetComponent<SpriteController> ().Say ();
		};
	}
}

引数がなければこんな感じで実装できました。