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的事件处理就变得简单而且条理了

  • 相关阅读:
    C#中IPAddress转换成整型int
    没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    VB.NET或C#报错:You must hava a license to use this ActiveX control.
    c#几种随机数组和数组乱序
    C#封装的websocket协议类
    VB生成条形码(EAN-13)
    VB控件间的拖放
    VB用API模拟截屏键PrintScreen
    VB读写进程的内存
    几个VB常见又内涵的错误
  • 原文地址:https://www.cnblogs.com/fws94/p/6673331.html
Copyright © 2011-2022 走看看