2016年6月29日 星期三

Unity

UI Event System

1
UnityAction 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;
    }
}

Messenger

http://wiki.unity3d.com/index.php/Advanced_CSharp_Messenger

沒有留言:

張貼留言