动机
最近在开发一个手柄塔防游戏,需要主角靠近塔的时候使用手柄选择建造哪一座塔。这时候实现手柄控制UI选择就十分必要了。
在B站上我有看到一个使用手柄控制UI的视频,是在UI里面每一tick检测输入,但是我为了优化的目的尽量不用tick,于是尝试出了这样的方法。
步骤
1. 绑定手柄的选择按键
- 名字和按键对应没关系,根据需要来就好了。
2. 创建简单的UI
- 创建一个控件蓝图
- 创建几个可选择的按钮
3. UI选择按钮事件
- 蓝色是按钮组件,创建一个index和一个size,分别代表当前选择的按钮和最大按钮数。
- 加减事件,也就是选择下一个按钮和上一个按钮。使用取余的方法循环选择,因为UE中负数取余会有问题,所以减一次要加一次size。
- 而Update事件就是将当前的按钮变成当前按钮的状态。为了更加显眼这里把背景变成红色。
- reset back ground是把所有的按钮变回原来的颜色。
* 最开始要调用一次Update,这样默认选择的就是第一个按钮
4. UI确认事件
- 创建Press事件,触发当前index选择的按钮的程序。使用switch选择后的处理,我是设置了一个塔的类型,根据大家的实际需要来写吧。
5. 创建UI
- 如果我们希望这个选择菜单是唯一的,可以创建一个用户控件UI进行处理。
- 创建UI的时候,如果UI已存在就先remove掉。
- 至于这个创建事件是怎么触发的,也是根据实际需要。可以是按键触发,也可以是游戏中的事件触发。
- 创建UI后,保存在UI这个变量里面。
6. 使用手柄操作事件控制UI
- 在人物蓝图里面创建输入操作,让UI执行Add事件(减也是一样的)
- 我因为有不同UI类型要处理,所以加了选择和cast,只有一种UI可以省略。
- 确认操作也是一样,获取UI,调用事件。调用事件后可以进行后续处理。
- 我这里在确认塔的类型后,立刻就调用build tower函数建塔。
7. 实际效果
- 一开始是范围塔
- 选择后变成射击塔
- 两种塔都能正确建好