最近做快捷键设置,所以先要做个基础的组件。
因为听说用InputField来改造会有比较多快捷键组件的特性与InputField的特性冲突的地方,比起Text来更加地耗费精力和时间。所以用Text来做了。 主要功能包括:
- 获得鼠标聚焦时,准备记录键盘输入按键
- 快捷键记录时,过滤鼠标按键
- 按下Enter键或者鼠标点击快捷键组件以外的区域完成修改
- 按下esc键撤销修改,并退出修改
- 按下退格键删除改快捷键的所有键盘按键并完成修改
- 单个快捷键最多允许输入三个键盘按键
- 聚焦时高亮,退出修改低亮
逻辑是有点复杂了,分支比较多。
因为是简单组件类,后面修改的可能性不大,就只是尽量面向对象的方式,考虑单一职责原则,将该作为单个功能分出去的类分出去。
有 按键判断类 快捷键数据类 快捷键组件类 高亮控制类四个部分
只有高亮控制类没有接受业务逻辑类的控制,可能会存在高亮和业务逻辑的需求不统一的情况, 后面可以考虑加上。目前测试一切正常。
需要注意:
-
继承ISelectHandler和IDeselectHandler的脚本,接口的方法起效需要在脚本的同个物体上挂载Selectable组件。这两个接口的方法在组件被选中和取消选中的时候会被回调。 参考 unity中关于UGUI的接口(点击 选择 系统按键等)
-
代码执行取消选中物体通过
EventSystem.current.SetSelectedGameObject(null);
实现,这句话不能连续调用两次,即连续写两遍,会报错。
工程地址