相关文章推荐
豪气的荒野  ·  不折腾会死星人Kindle ...·  1 年前    · 
帅气的松球  ·  漫长的季节:深挖龚彪和小露的那点事_腾讯新闻·  1 年前    · 
想旅行的显示器  ·  邓家现状·  2 年前    · 
想旅行的地瓜  ·  冈比亚 Banjul Gambia 班珠尔_ ...·  2 年前    · 
满身肌肉的火柴  ·  熊出没之怪兽计划_百度百科·  2 年前    · 
Code  ›  Unity UI案例(长按按钮和双击按钮案例开发者社区
按钮 unity
https://cloud.tencent.com/developer/article/1547158
会搭讪的日记本
2 年前
作者头像
bering
0 篇文章

Unity UI案例(长按按钮和双击按钮案例

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 游戏开发之旅 > Unity UI案例(长按按钮和双击按钮案例

Unity UI案例(长按按钮和双击按钮案例

作者头像
bering
发布 于 2019-12-03 11:52:12
1.4K 1
发布 于 2019-12-03 11:52:12
举报

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Unity中要实现自己得Button需要编写继承自UnityEngine的Button类,然后再重写按钮按下,抬起,和离开的方法(OnPointerDown,OnPointerUp,OnPointerExit),记录时间差就行了,具体实现看代码:

一:长按按钮实现:

public class LongClickButton : Button {
    [Serializable]
    public class LongButtonEvent : UnityEvent { }
    [SerializeField]
    private LongButtonEvent _onLongButtonClick = new LongButtonEvent();
    public LongButtonEvent OnLongButtonClick
            return _onLongButtonClick;
            _onLongButtonClick = value;
    private DateTime m_FirstTime;
    private DateTime m_SecondTime;
    void ResetTime()
        m_FirstTime = default(DateTime);
        m_SecondTime = default(DateTime);
    void Press()
        if (OnLongButtonClick != null)
            OnLongButtonClick.Invoke();
            ResetTime();
    public override void OnPointerDown(PointerEventData eventData)
        base.OnPointerDown(eventData);
        if(m_FirstTime.Equals(default(DateTime)))
            m_FirstTime = DateTime.Now;
    public override void OnPointerUp(PointerEventData eventData)
        base.OnPointerUp(eventData);
        if(!m_FirstTime.Equals(default(DateTime)))
            m_SecondTime = DateTime.Now;
        if(!m_FirstTime.Equals(default(DateTime))&&!m_SecondTime.Equals(default(DateTime)))
            var intervalTime = m_SecondTime - m_FirstTime;
            float milliTime = intervalTime.Seconds * 1000 + intervalTime.Milliseconds;//毫秒
            if (milliTime > 600)
                Press();
                ResetTime();
    public override void OnPointerExit(PointerEventData eventData)
        base.OnPointerExit(eventData);
        ResetTime();
}

调用: longButton.OnLongButtonClick.AddListener(() => { Debug.Log("LongButtonClick"); });

二.双击按钮实现

public class DoubleClikeButton : Button
    [Serializable]
    public class DoubleClickEvent : UnityEvent { }
    [SerializeField]
    private DoubleClickEvent _onDoubleClick = new DoubleClickEvent();
    public DoubleClickEvent OnDoubleClick
            return _onDoubleClick;
            _onDoubleClick = value;
    private DateTime m_firstTime;
    private DateTime m_SecondTime;
    private void ResetTime()
        m_firstTime = default(DateTime);
        m_SecondTime = default(DateTime);
    private void Press()
        if (OnDoubleClick != null)
            OnDoubleClick.Invoke();
            ResetTime();
    public override void OnPointerDown(PointerEventData eventData)
        base.OnPointerDown(eventData);
        if (m_firstTime.Equals(default(DateTime)))
            m_firstTime = DateTime.Now;
            m_SecondTime = DateTime.Now;
    public override void OnPointerUp(PointerEventData eventData)
        base.OnPointerUp(eventData);
        if (!m_firstTime.Equals(default(DateTime)) && !m_SecondTime.Equals(default(DateTime)))
            var intervalTime = m_SecondTime - m_firstTime;
            float milliTime = intervalTime.Seconds * 1000 + intervalTime.Milliseconds;
            if (milliTime < 400)
                Press();
                ResetTime();
 
推荐文章
豪气的荒野  ·  不折腾会死星人Kindle Paperwhite4拆机翻新记_kpw4拆机_未名铭的博客-CSDN博客
1 年前
帅气的松球  ·  漫长的季节:深挖龚彪和小露的那点事_腾讯新闻
1 年前
想旅行的显示器  ·  邓家现状
2 年前
想旅行的地瓜  ·  冈比亚 Banjul Gambia 班珠尔_用户1625847617_新浪博客
2 年前
满身肌肉的火柴  ·  熊出没之怪兽计划_百度百科
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号