用了这么多年操作系统后发现,我们早就被科技巨头驯化,单击双击早就已经变成肌肉记忆了。
这就叫设计规范——也叫“人类调教说明书”。从这个角度看,某些科技巨头为“确认键”应该在左在右打得不可开交完全可以理解。我们也没必要逆潮流去开发新的操作方式,去和科技巨头去争夺人类主宰权。
当然,如果你的应用已经拥有了一套操作方式,用户也养成了使用习惯,并体验良好。那么也没有必要去改成所谓的标准。(读者读至此处,应已自然而然地意识到博主在暗示红警2和红警3,并露出赞同的微笑)
那么假设你的用户用惯了windows,鄙视你现在蹩脚的操作体验,甩你一脸需求,要你与国际接轨。你很可能就需要这么一个东西了。。。
一直想把常用的功能做成模块化,即插即用,不至于每个工程都要重新做。那么从鼠标操作入手最好不过了,顺便在这里记录一下心得,日后也当个笔记。
UE4制作一个蓝图的多功能鼠标宏(一)单击、双击、取消点击
先从熟练操作鼠标的肌肉记忆里回忆一下,邪恶的科技巨头是如何把我们调教成熟练使用鼠标的乖宝宝的。
既然做最基础的东西,那我马上从蚯状肌附近找到了一些关于“单击双击”有关的操作体验的记忆,那就是“取消点击”,这个被无视却又最常用的操作。
于是今天先做基础功能“单击双击”,和一个优化体验的功能,“取消点击”,
- 单击双击是基础中的基础,自然不用多解释
- “取消点击”是一种点击过程中的“后悔药”,具体操作如下图所示。这次我想要手动实现这个功能,谁能拒绝后悔药呢?
![]()
点击保存时,突然想起今天心血来潮把项目改的烂七八糟,这保存已经按下去了,一撒手可能会死
此时你按住按钮不松手,拖出范围再释放,达到了取消点击行为的目的
你因为后怕而出了一身冷汗,如果没有这个后悔药机制,明天就可能去天桥卖手抓饼了
逻辑基本如下
姑且用核弹发射举个例子,要做一个点击按钮发射核弹的发射系统
顺序 | 逻辑 | 信息反馈 | 说明 |
---|---|---|---|
1 | 移动鼠标到可交互的元素上(例如一个按钮状的模型) | 可选择 | 鼠标指针改变成手指图标、或者按钮上显示出“Don’t Touch Anything”等,用于示意此按钮为可点击的元素 |
2 | 按下并保持按下状态 | 按下 | 此时按钮以是按下的视觉状态,但仍未触发事件 ① ① |
3 | 判断 | - | 系统开始紧张起来了,用户此时会突然拖动鼠标 ② ② 反悔吗? |
4 | 原地抬起/拖动抬起 | 复原为默认状态或已被使用状态 | 执行发射/取消发射 |
①
单击是抬起鼠标才“确认”执行后续功能
②
反悔机制,例如用户A想发射核弹,按下按钮时,用余光发现核弹目标定在了自己家,现在突然反悔,此时可以在不抬起鼠标的情况下,拖动鼠标移出按钮再松手。这样可以取消触发点击操作
注意
双击是单击两次,必含一个单击。也就是理论上不能单双击功能共存
例如:单击按钮的功能是发射核弹,双击按钮的功能是弹出修改核弹目标的窗口
此时用户A如果想修改核弹目标,就会在双击的第一击按完、第二击未按之前,让自己的户口地址从地球上抹去
做相关业务的同行务必慎重
嗯,我一如既往的信任蚯状肌,并以此为逻辑开始
做UE4蓝图吧
要说明UMG的小部件可以用自带的 onDoubleClick ,操作UMG按钮之类的部件可以直接使用。此处蓝图适用于UMG部件以外的用处。
第一部分 单击、双击
创建宏
![]()
新建一个 蓝图宏库 。这里做成独立的宏,就可以在任何蓝图使用它,而不会与自身发生冲突。
这里要注意!宏库只能保存不能编译。若修改了宏的内容,需要去编译使用了这个宏的蓝图
![]()
用帅气的指法将宏库命名为 Macro_Click
点击加号新建一个宏,命名为 Click (右边上角红框处)
蓝图内容如图
扩展一下,宏中是没有全局变量的,而下面的 Local布尔型 (Local Boolean) 就是宏的局部变量,相当于 get 变量 第一次看到的朋友不要慌张。而上面的 分配(Assign) 自然就是 Set 变量
具体节点功能在这里就不细说了,官方文档都可以查得到
在关卡蓝图中使用宏
内容如图,在关卡蓝图直接输入Click就可以找到我们自己做的宏了
至此,单击双击的最最基础的功能就已经实现了
第二部分 取消点击
在宏中添加新功能
如图所示,很基础,没什么复杂的东西,改了输入值和输出值的名字等,还调皮的把实例材质改成红色
取消点击部分:
通过获取按下和抬起时的屏幕位置,计算出这个过程中鼠标位移了多少距离。这里用 Get mouse Position on Platform 是因为我觉得显示器的大小会比窗口的大小准确,也适合更复杂的情况。然后对比 “取消点击的距离” 值,判断用户是否已经做出了 “取消单击” 的操作
将距离连到输入值 “取消点击的距离” ,使其可以在外部进行修改。
“取消点击的距离” 的默认值此时设置为10,“双击间隔” 为0.25
增加了判断,使其若“取消点击”,就不执行“单击”和“双击”
最后保存宏,把修改好的宏连上打印,编译,测试ok
结束
今天就做到这里,实现了基础的单击双击和取消点击。今后有时间还会继续完善扩展这个Click宏的功能~~
话说回来蚯状肌到底是哪块?