KGUI是我基于特定的项目需求、基于对UGUI控件的局限,在利用UGUI RectTranform与Image等基本控件,扩展出来一套适合自己项目的GUI。在上一节中,介绍了【基于Unity-Ray射线,实现UGUI Button功能】。
Button组需求:在实际项目开发中,我们经常会遇到菜单类功能,比如选中某个按钮,该按钮处于选中状态并且显示一套UI出来。选择另一个按钮,在同一个按钮又显示另一套UI等。
Toggle需求:Toggle则简单,顾名思义就是开关的意思。
一、ButtonGroup实现思路
在【基于Unity-Ray射线,实现UGUI Button功能】中介绍了Button基类(KGUI_ButtonBase),在这里不详细介绍。ButtonGroup实现比较简单,重点需要处理以下即可:
1、Button集合
获取到哪些Button加入为一组。
在设计中,我在Button类添加一个IsButtonGroup属性,当该属性被选中时,则会激活一个ButtonGroup属性,运行时,会将该Button加入到Button组中。
KGUI_Button是继承自KGUI_ButtonBase类,我对KGUI_Button进行了编辑器封装。
ButtonGroup相关属性以及初始化方法,用于获取到同组内的所有Button。
这样当运行时,Button组就会获取到所有的Button了。
2、Button相关事件的限制
当Button加入到Button组后,下一步需要做的是当选中这个Button组后,所需要对一些Button事件进行处理了。
当Button初始被选中时,在Start执行OnClick方法,执行选中事件。
对OnClick事件进行Button组限制处理,当该物体已经被选中时,在选中这个是无效的,不在执行该OnClick事件。 如果点击的是另一个,则对前面那一个Button执行OnReset()重置方法,并且设置为当前Button为选中状态。
对OnEnter事件进行Button组限制处理,当移入到已经选中的Button时,则什么都不处理。
OnReset()重置,对选中的Button进行一些交互处理以及一些状态复原。
对OnExit()事件进行处理,当移出选中的Button时,则不进行OnExit()事件处理。
3、 Button组中的添加、移除、设置
也可以通过代码添加/移除指定的Button到Button组中。
也可通过代码设置指定的Button为被选中状态。
Button组的实现就到此结束了,它比较简单。基本上一下就可以写出来了。
二、Toggle实现思路
Toggle则是开关,它的实现也是比较简单的。同样它集成自KGUI_ButtonBase。这样他就支持UGUI、SpriteRender、Object等几种模式,而不是局限与UGUI的图片互动。如果对这三种模式不了解的,可以看【基于Unity-Ray射线,实现UGUI Button功能】。
Toggle其实只需要一个Bool值即可,当执行OnClick时,设置bool值就OK了。然后基于这个,在进行一些简单扩展,比如事件的传输或者一些交互互动。
因为它继承自KGUI_ButtonBase。所以支持OnClick事件,只需要重写这个方法即可,设置IsValue属性。
下面这个方法,则是我对Toggle的一些互动处理。当然这个根据自身情况来进行编写。
在对Toggle进行编辑器封装,得到如下:
三、总结
至此Button组与Toggle就讲解完毕,这两个控件实现思路非常简单,只是基于KGUI_ButonBase进行处理与继承,从而衍生出这些功能。
下一篇讲解UGUI RectTransform的坐标点问题。了解该坐标点后,可实现代码计算对UI布局、也可实现通过屏幕坐标的计算来实现相关控件的功能。
读者如果有任何的疑问或意见可以直接关注我的公众号(Hua灬清)进行询问,同时每周会推送原创技术博客。