unity 长按一个按钮 实现长按升级

34 篇文章 0 订阅
1 篇文章 0 订阅

先写一个简化工具


//工具 挂载在需要长按的按钮上
public class EventTriggerListener : EventTrigger
{
    public delegate void PointerDelegate(GameObject r_go, PointerEventData r_data,bool iSgo=true);
    public delegate void BasePointerDelegate(GameObject r_go, BaseEventData r_data);

    public PointerDelegate onClick = null;
    public PointerDelegate onDown = null;
    public PointerDelegate onEnter = null;
    public PointerDelegate onExit = null;
    public PointerDelegate onUp = null;
    public PointerDelegate onDrag = null;
    public PointerDelegate onBeginDrag = null;
    public PointerDelegate onEndDrag = null;


    static public EventTriggerListener Get(Graphic r_graphic)
    {
        if (r_graphic != null)
        {
            return Get(r_graphic.gameObject);
        }
        return null;
    }

    static public EventTriggerListener Get(GameObject r_go)
    {
        if (r_go != null)
        {
            EventTriggerListener listener = r_go.GetComponent<EventTriggerListener>();
            if (listener == null)
            {
                listener = r_go.AddComponent<EventTriggerListener>();
            }
            return listener;
        }
        return null;
    }
    public override void OnPointerClick(PointerEventData r_eventData)
    {
        onClick?.Invoke(gameObject, r_eventData);
    }
    public override void OnPointerDown(PointerEventData r_eventData)
    {
        onDown?.Invoke(gameObject, r_eventData);
    }
    public override void OnPointerEnter(PointerEventData r_eventData)
    {
        onEnter?.Invoke(gameObject, r_eventData);
    }
    public override void OnPointerExit(PointerEventData r_eventData)
    {
        onExit?.Invoke(gameObject, r_eventData);
    }
    public override void OnPointerUp(PointerEventData r_eventData)
    {
        onUp?.Invoke(gameObject, r_eventData);
    }

    public override void OnBeginDrag(PointerEventData r_eventData)
    {
        base.OnBeginDrag(r_eventData);
        onBeginDrag?.Invoke(gameObject, r_eventData);
    }

    public override void OnDrag(PointerEventData eventData)
    {
        base.OnDrag(eventData);
        onDrag?.Invoke(gameObject, eventData);
    }

    public override void OnEndDrag(PointerEventData eventData)
    {
        base.OnEndDrag(eventData);
        onEndDrag?.Invoke(gameObject, eventData);
    }
}

调用的时候

   /// <summary>
            /// 升级
            /// </summary>
            EventTriggerListener _btnUpgrade;
                float m_timer = 0;
            float time = 0;
            float CanLastTimer = 0.5f;//按下的时间长度
            //按下的时候开始计时
              _btnUpgrade.onDown = (GameObject r_go , UnityEngine.EventSystems.PointerEventData r_data , bool isGae) =>
                {
                    AsyncMouseDown ();
                };
                  /// <summary>
            /// 检测
            /// </summary>
            private void AsyncMouseDown ()
            {
                m_timer = 0;
                while ( true )
                {
                    if ( this == null ) return;
                    try
                    {
                        if ( Input.GetMouseButton (0) )
                        {
                            m_timer += CanLastTimer;
                            if ( m_timer >= 1f )
                            {
                                Debug.Log ("长按了");
                                OnBtnUpgradeTouched ();需要执行的方法
                                return;
                            }
                        }
                        else
                        {
                            m_timer = 0;
                            if ( ( Time.realtimeSinceStartup - time ) < 1f )
                            {
                                return;
                            }
                            OnBtnUpgradeTouched ();需要执行的方法
                            return;
                        }
                    }
                    catch ( Exception e ) { Debug.LogError (e.Message); return; }
                }
            }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤实现Unity按钮播放视频松开按钮: 1. 创建一个按钮并添加OnClick事件。 2. 在OnClick事件中,使用InvokeRepeating()函数来定期调用一个方法,该方法将在按钮期间一直执行。 3. 在该方法中,检测按钮是否已松开。如果按钮已松开,则停止InvokeRepeating()。 4. 在该方法中,检测按钮是否已按下。如果按钮已按下,则播放视频。 下面是示例代码: ```csharp public class ButtonController : MonoBehaviour { public GameObject videoPlayer; private bool isPressed = false; public void OnButtonDown() { isPressed = true; InvokeRepeating("CheckButton", 0, 0.1f); } public void OnButtonUp() { isPressed = false; CancelInvoke("CheckButton"); } private void CheckButton() { if (isPressed) { // 播放视频 videoPlayer.SetActive(true); } else { // 停止播放视频 videoPlayer.SetActive(false); CancelInvoke("CheckButton"); } } } ``` 在上面的示例代码中,我们创建了一个名为ButtonController的脚本,并将其添加到按钮上。该脚本包含了两个方法:OnButtonDown()和OnButtonUp(),分别在按钮按下和松开时调用。我们还添加了一个名为videoPlayer的游戏对象,它将在按钮按期间用于播放视频。 在OnButtonDown()方法中,我们将isPressed设置为true,并使用InvokeRepeating()函数定期调用CheckButton()方法。在CheckButton()方法中,我们检测按钮是否已按下或已松开,并根据需要播放或停止视频。最后,在OnButtonUp()方法中,我们将isPressed设置为false,并取消InvokeRepeating()。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值