zoukankan      html  css  js  c++  java
  • Unity3D NGUI事件监听的综合管理

    首先,将Event Listener挂在按钮上

    Event Listener的源码很简单

    就是利用C#的时间委托机制

    注册了UI场景的事件而已

    public class UIEventListener : MonoBehaviour
    
    {
        public delegate void VoidDelegate(GameObject go);
        public delegate void BoolDelegate(GameObject go, bool state);
        public delegate void FloatDelegate(GameObject go, float delta);
        public delegate void VectorDelegate(GameObject go, Vector2 delta);
        public delegate void StringDelegate(GameObject go, string text);
        public delegate void ObjectDelegate(GameObject go, GameObject draggedObject);
        public delegate void KeyCodeDelegate(GameObject go, KeyCode key);
    
        public object parameter;
    
        public VoidDelegate onSubmit;
        public VoidDelegate onClick;
        public VoidDelegate onDoubleClick;
        public BoolDelegate onHover;
        public BoolDelegate onPress;
        public BoolDelegate onSelect;
        public FloatDelegate onScroll;
        public VectorDelegate onDrag;
        public ObjectDelegate onDrop;
        public StringDelegate onInput;
        public KeyCodeDelegate onKey;
    
        void OnSubmit() { if (onSubmit != null) onSubmit(gameObject); }
        void OnClick() { if (onClick != null) onClick(gameObject); }
        void OnDoubleClick() { if (onDoubleClick != null) onDoubleClick(gameObject); }
        void OnHover(bool isOver) { if (onHover != null) onHover(gameObject, isOver); }
        void OnPress(bool isPressed) { if (onPress != null) onPress(gameObject, isPressed); }
        void OnSelect(bool selected) { if (onSelect != null) onSelect(gameObject, selected); }
        void OnScroll(float delta) { if (onScroll != null) onScroll(gameObject, delta); }
        void OnDrag(Vector2 delta) { if (onDrag != null) onDrag(gameObject, delta); }
        void OnDrop(GameObject go) { if (onDrop != null) onDrop(gameObject, go); }
        void OnInput(string text) { if (onInput != null) onInput(gameObject, text); }
        void OnKey(KeyCode key) { if (onKey != null) onKey(gameObject, key); }
    
        /// <summary>
        /// Get or add an event listener to the specified game object.
        /// </summary>
    
        static public UIEventListener Get(GameObject go)
        {
            UIEventListener listener = go.GetComponent<UIEventListener>();
            if (listener == null) listener = go.AddComponent<UIEventListener>();
            return listener;
        }
    }
     

    那么,如何调用呢

    使用这个脚本进行统一管理后

    就不需要将脚本一个一个地拖入按钮

    而是在任何脚本或类中都可以直接调用

    void Start()
    
    {
        GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
        UIEventListener.Get(button).onClick = OnClick;
    }
    
    void OnClick(GameObject button)
    {
        Debug.Log(button.name);
    }
     

    就是这样

    这样一来,NGUI的事件处理就变得简单而且条理了

  • 相关阅读:
    商战
    广告、好广告
    车的一点知识
    微服务应用的性能
    js 的一点用法
    做生意、做买卖
    [CODEVS1912] 汽车加油行驶问题(分层图最短路)
    [CODEVS1911] 孤岛营救问题(分层图最短路)
    [luoguP2754] 星际转移问题(最大流)
    [POJ1226]Substrings(后缀数组)
  • 原文地址:https://www.cnblogs.com/fws94/p/6673331.html
Copyright © 2011-2022 走看看