真Unity3d

    技术2022-07-10  160

    基于Unity3d的事件系统和C#的委托特性,提供一下通用事件监听代码,挺真通用的说,反正用过都说好

    lua和C#都能通用,长期在项目中使用,无任何暗病

    而网上复制粘贴代码,很容易有空行,(或者前面行号)

    代码

    using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; //事件系统 namespace kernal { public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger { public delegate void VoidDelegate(GameObject go); public VoidDelegate onClick; public VoidDelegate onDown; public VoidDelegate onEnter; public VoidDelegate onExit; public VoidDelegate onUp; public VoidDelegate onSelect; public VoidDelegate onUpdateSelect; /// <summary> /// 得到“监听器”组件 /// </summary> /// <param name="go">监听的游戏对象</param> /// <returns> /// 返回监听器 /// </returns> public static EventTriggerListener Get(GameObject go) { EventTriggerListener lister = go.GetComponent<EventTriggerListener>(); if (lister==null) { lister = go.AddComponent<EventTriggerListener>(); } return lister; } public override void OnPointerClick(PointerEventData eventData) { if (onClick!=null) { onClick(gameObject); } } public override void OnPointerDown(PointerEventData eventData) { if (onDown != null) { onDown(gameObject); } } public override void OnPointerEnter(PointerEventData eventData) { if (onEnter != null) { onEnter(gameObject); } } public override void OnPointerExit(PointerEventData eventData) { if (onExit != null) { onExit(gameObject); } } public override void OnPointerUp(PointerEventData eventData) { if (onUp != null) { onUp(gameObject); } } public override void OnSelect(BaseEventData eventData) { if (onSelect != null) { onSelect(gameObject); } } public override void OnUpdateSelected(BaseEventData eventData) { if (onUpdateSelect != null) { onUpdateSelect(gameObject); } } }//class_end }

    使用方法

    EventTriggerListener.Get(Btn_10_Diamonds.gameObject).onClick += Purchase10Diamend;

    另外,去除代码空行方法

    Enter: Ctrl+HFind what: ^(?([^\r\n])\s)*\r?$\r?\nReplace with: [Empty]Look in: Current DocumentFind Option: Use Regular ExpressionsClick: Replace All

    解释一下正则表达式^:b*$\n,^表示一行的开始,$表示一行的结束,:b表示空格或tab,*表示0个或多个。\n表示换行符。

     

    ^(?([^\r\n])\s)*\r?$\r?\n

     

    上面截图有点错。。。。。。。。。。。。

    继承类避免滚动和点击冲突

    namespace kernal { /// <summary> /// 避免和滚动事件冲突的点击事件;用一个很笨的方法做延迟,解决点击和 Drag 冲突问题 /// </summary> public class EventGesture:EventTriggerListener { static bool isSrolling = false; public override void OnPointerClick(PointerEventData eventData) { if (isSrolling == true) return; base.OnPointerClick(eventData); } public override void OnDrag(PointerEventData eventData) { isSrolling = true; base.OnDrag(eventData); } public override void OnPointerUp(PointerEventData eventData) { Invoke("SetScrollUp",0.01f); //只能判断是否在ui上 //if (EventSystem.current.IsPointerOverGameObject(finterid)) { // //base.onPointerClick; //} //isSrolling = false; base.OnPointerUp(eventData); } void SetScrollUp() { isSrolling = false; } } }

     

    Processed: 0.012, SQL: 9