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

项目结构:
- Assets
- ButtonEx
- ButtonEx.cs //核心
- Editor
- ButtonExEditor.cs //核心
- Demo //演示用的
- ButtonEx
设计目的
1.实现按钮的其他交互逻辑
UnityEngine.UI.Button只实现了onCLick点击事件,而实际项目中,按下、按起、长按、双击等交互逻辑也会用到。解决办法:
ButtonEx继承UnityEngine.UI.Button或UnityEngine.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(开关在组件右上角三个点里)

浙公网安备 33010602011771号