UI Event System
1UnityAction btnBackAction = () => { onBtnClick(); };
btnBack.onClick.AddListener(btnBackAction);
2
inputField.onEndEdit.AddListener(new UnityAction<string>(onFunc));
3
inputField.onEndEdit.AddListener((string value) =>{ onFunc(value); } );
4
inputField.onEndEdit.AddListener(delegate { onFunc(""); });//參數固定
Message System
Message System is a sub system of event system
這種做法,類似於直接呼叫。
//define a message interface
using UnityEngine.EventSystems;
public interface IMessageSystemHandler : IEventSystemHandler {
void Message1();
void Message2();
}
//define a MonoBehaviour class
public class EventSys : MonoBehaviour,IMessageSystemHandler
{
public void Message1()
{
Debug.Log("Message1");
}
public void Message2()
{
Debug.Log("Message2");
}
}
//use EventSys in main flow
using UnityEngine.EventSystems;
public class Main : MonoBehaviour
{
void Start () {
//var eventData = new CustomEventData { publicField = 5.0f };
//usage 1 ,use real time delegate
//bad for garbage collection
//ExecuteEvents.Execute(gameobject, null,(IMessageSystemHandler ms,
BaseEventData b) => ms.Message1());
//or
ExecuteEvents.Execute(gameobject, null, MSH2);
//or
ExecuteEvents.Execute(gameobject, null, MSH2);
Debug.Log("main end");
}
private void MSH(IMessageSystemHandler handler, BaseEventData data)
{
handler.Message1();
}
//delegage this function to MSH2
private ExecuteEvents.EventFunction MSH2 = delegate (IMessageSystemHandler handler, BaseEventData data)
{
handler.Message1();
};
}
Event Manager
http://wiki.unity3d.com/index.php/CSharpEventManager
using UnityEngine;
using System.Collections;
public class TestListener : MonoBehaviour, IEventListener
{
void Start()
{
EventManager.instance.AddListener(this as IEventListener, "TestEvent");
}
bool IEventListener.HandleEvent(IEvent evt)
{
string txt = evt.GetData() as string;
Debug.Log("Event received: " + evt.GetName() + " with data: " + txt);
return true;
}
}






