真Unity3d_分享一个通用事件监听EventTrigger以及拷贝代码去除空行问题

基于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+H
  • Find what: ^(?([^\r\n])\s)*\r?$\r?\n
  • Replace with: [Empty]
  • Look in: Current Document
  • Find Option: Use Regular Expressions
  • Click: 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;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值