相关文章推荐
追风的凳子  ·  Unity Problem in ...·  2 月前    · 
热心的黄花菜  ·  Crashdumps in Mono ...·  2 月前    · 
不爱学习的甘蔗  ·  Animation ...·  2 月前    · 
豁达的圣诞树  ·  Unity3D研究院之使用Animation ...·  2 月前    · 
深情的针织衫  ·  Unity Documentation·  2 月前    · 
悲伤的茄子  ·  提前49个月落户才能上!下沙沿江这所小学,为 ...·  1 年前    · 
爱看书的羽毛球  ·  杭州一小学取消寒假书面作业,你觉得寒暑假作业 ...·  1 年前    · 
严肃的枕头  ·  美国2月非农就业人数超预期 ...·  1 年前    · 
爱运动的皮蛋  ·  宇宙护卫队风暴力量电影 - 抖音·  2 年前    · 
曾深爱过的黄瓜  ·  03 仙女姐姐? - 妖精刺客联盟 - 包子漫画·  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();
 
推荐文章
追风的凳子  ·  Unity Problem in using C# System.Diagnostics.Process - Unity Engine - Unity Discussions
2 月前
热心的黄花菜  ·  Crashdumps in Mono (Unity 3D) - SDKs - #sentry
2 月前
不爱学习的甘蔗  ·  Animation Curve(动画曲线):设计的终极控制杆
2 月前
豁达的圣诞树  ·  Unity3D研究院之使用Animation编辑器编辑动画(五十四) | 雨松MOMO程序研究院
2 月前
深情的针织衫  ·  Unity Documentation
2 月前
悲伤的茄子  ·  提前49个月落户才能上!下沙沿江这所小学,为何比学军、天长等老牌名校还火爆?_文清_学区_公寓
1 年前
爱看书的羽毛球  ·  杭州一小学取消寒假书面作业,你觉得寒暑假作业应该取消吗? | 南方周末
1 年前
严肃的枕头  ·  美国2月非农就业人数超预期 但失业率升至两年新高_手机新浪网
1 年前
爱运动的皮蛋  ·  宇宙护卫队风暴力量电影 - 抖音
2 年前
曾深爱过的黄瓜  ·  03 仙女姐姐? - 妖精刺客联盟 - 包子漫画
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号