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; } }
沒有留言:
張貼留言