当前位置 : 主页 > 编程语言 > 其它开发 >

Unity - ButtonEx扩展按钮

来源:互联网 收集:自由互联 发布时间:2022-05-30
ButtonEx 组件,一个对 UnityEngine.UI.Button Unity的扩展。实现了除onClick外的常用按钮交互事件,并定制了Inspector ButtonEx 组件,一个对 UnityEngine.UI.Button Unity的扩展。实现了除 onClick 外的常用按
ButtonEx 组件,一个对 UnityEngine.UI.Button Unity的扩展。实现了除onClick外的常用按钮交互事件,并定制了Inspector

ButtonEx 组件,一个对 UnityEngine.UI.Button Unity的扩展。实现了除onClick外的常用按钮交互事件,并定制了Inspector

项目结构:

  • Assets
    • ButtonEx
      • ButtonEx.cs //核心
      • Editor
        • ButtonExEditor.cs //核心
      • Demo //演示用的

项目地址:ButtonEx - SouthBegonia

设计目的 1.实现按钮的其他交互逻辑

UnityEngine.UI.Button只实现了onCLick点击事件,而实际项目中,按下、按起、长按、双击等交互逻辑也会用到。解决办法:

  • ButtonEx继承UnityEngine.UI.ButtonUnityEngine.UI.Selectable后,实现 IPointerDownHandler等几个接口和长按逻辑即可
2.实现按钮的业务逻辑

通常点击按钮后,可能要播放按钮的点击音效、动效。为避免程序在各业务代码内编写重复代码,也方便公开相关参数(如播放音效的参数,动效参数)给非程序人员调控,因此相关业务逻辑完全可以放在ButtonEx内。解决办法(源码内就不具体编写了):

  • 可以在ButtonEx.Awake()时开启onClick的监听:onClick.AddListener(PlaySound()),但要注意是否会被其他代码RemoveAllListeners()
  • 也可以在m_OnClick.Invoke()执行前自主调用PlaySound()
3.ButtonEx的引入,不能影响原有Button

若不是开坑初期就引入ButtonEx,就避免不了此问题:原有代码内就有大量对Button的使用,若新加的ButtonEx不是在Button上实现的,就得全部替换代码,还得告知其他程序人员该用ButtonEx或是Button,很大的工作量。解决办法:

  • ButtonEx选择继承自UnityEngine.UI.Button,而不是UnityEngine.UI.Selectable,但这么做的话就还得编写ButtonEx的Inspector脚本(狗蛋:这就是代价)
4.定制ButtonEx的Inspector页面

若是不定制Inspector页面,虽然也可以根据Attributes属性做些美化(也不是不能用),但考虑到未来可能有更多扩展,也为了方便非程序人员的直观使用,因此可以特殊定制其Inspector页面。解决办法:

  • 因为ButtonEx是继承UnityEngine,UI.Button的,则其扩展脚本ButtonExEditor就继承自SelectableEditor进行定制
现有功能
  • 常用按钮交互事件
    • 按下(onDown)、按起(onUp)、进入(onEnter)、移出(onExit)、长按(onLongClick)、双击(onDoubleClick
  • Editor模式下Button无损转换为ButtonEx(开关在组件右上角三个点里)
参考文章
  • ButtonEx - mob-sakai
  • Unity按钮拓展 - 纯纯小萌新
网友评论