用了这么多年操作系统后发现,我们早就被科技巨头驯化,单击双击早就已经变成肌肉记忆了。
这就叫设计规范——也叫“人类调教说明书”。从这个角度看,某些科技巨头为“确认键”应该在左在右打得不可开交完全可以理解。我们也没必要逆潮流去开发新的操作方式,去和科技巨头去争夺人类主宰权。
当然,如果你的应用已经拥有了一套操作方式,用户也养成了使用习惯,并体验良好。那么也没有必要去改成所谓的标准。(读者读至此处,应已自然而然地意识到博主在暗示红警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宏的功能~~

话说回来蚯状肌到底是哪块?

UE4制作一个蓝图的多功能鼠标宏(一)——单击、双击和取消点击相关推荐

  1. 【UE5/UE4】【UE C++】制作一个蓝图宏库用以在构造器中Spawn Actor

    实际上该功能可以通过纯蓝图写出,以下展示蓝图中如何操作构造器 仅需在创建"自定义事件"的时候勾选"编辑器中调用"属性,然后就可以直接在蓝图中生成 但同时,我们发 ...

  2. 使用gojs制作一个具备文件读写功能的家谱网页

    效果 一些功能 数据结构 实现 文件结构 edit.html edit.js 效果 一些功能 操作过程中,随时可以用 Ctrl + Z, Ctrl + Y 撤销或回退操作 双击空白创建一个节点 也可以 ...

  3. 鼠标左键单击双击冲突的一种解决方法

    鼠标在得到左键双击事件时,同时也得到了左键down的消息.在只想处理双击事件而不处理按下事件,有下面的方法. 思路: 在收到单击事件后,不处理单击事件,而是settimer,将单击事件对应的操作放到t ...

  4. C#窗体鼠标事件区分单击双击

    直接用窗体的click和doubleclick事件相应函数是没办法区分的,因为click在doubleclick前面被触发. 办法一: 在mousedown事件中处理,通过timer计算两次单击时间差 ...

  5. 如何用UE4制作2D游戏文档(一)——基础篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  6. 如何用UE4制作2D游戏文档(二)——资源篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  7. 如何用UE4制作2D游戏文档(三)——角色篇

    一.前言 首先感谢B站马克镇镇长的视频讲解清晰把很多细节都照顾到了,我本来自己做的时候没有视频说的那么细,参考他的全套系列视频之后完善了很多内容. 视频指路:https://www.bilibili. ...

  8. 【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能

    这是我拆解游戏项目的CameraSystem做出的一点点小总结,然后写了一个非常非常简单的锁定敌人的功能: 第一步:设置敌人属性,标志为可被锁定 创建一个敌人蓝图,随便搞个模型进去 创建一个接口蓝图, ...

  9. C#制作一个图片查看器,具有滚轮放大缩小,鼠标拖动,图像像素化,显示颜色RGB信息功能

    目录 前言 一.界面设计 二.关键技术 1.把图片拖入到窗体并显示 2.实现图像缩放的功能 3.实现图像的移动效果 4.实时显示当前鼠标处的RGB值 5. 右击功能的实现 6.效果展示 总结 前言 使 ...

  10. UE4学习之路【八】通过蓝图接口制作一个简易门

    在第二期我制作了一个可以由玩家控制开关的简易门,传送门:UE4学习之路[二]制作一个简易门(上),是通过在门的蓝图类里使用Get Player Controller和Enable Input来开启玩家 ...

最新文章

  1. Postgres多版本控制
  2. Flyweight 享元模式
  3. MVP谈WinHEC:Demo很炫 Windows 7启动快
  4. 聊聊resilience4j的CircuitBreakerStateMachine
  5. java基础_数组常用算法
  6. 如何在Component template函数执行时查看ɵɵtemplate或者ɵɵproperty传入的参数值
  7. map集合的putall_Map.put和Map.putAll方法之间的区别?
  8. linux代理破盾cc,Linux使用CCKiller防御少量IP高并发CC攻击(防刷站) - Late Winter
  9. java写原生js_[Java教程]原生JS拖拽
  10. 实现类去实现接口的时候,将接口的注释一起重写出来设置
  11. ios android 系统字体,ios、android 系统字体说明
  12. matlab进化树的下载,MEGA进化树下载
  13. 一、Zstack基础知识(ZCCT云计算认证)
  14. 001.Heartbeat简介
  15. linux 输入密码后无法进入系统,【Linux学习笔记十六】用户密码修复和GRUB引导错误无法进入系统解决办法...
  16. 一文带你全面了解什么是颠覆时代的Web3.0未来互联网
  17. 【致远FAQ】致远OA宕机之内存溢出
  18. win10右键一直转圈_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
  19. 攻防世界——pwn_warmup
  20. 3天1W赞的程序员学习路线,入门进阶都非常实用

热门文章

  1. React 集成jsoneditor后,password格式保护json数据的敏感信息
  2. 淘系双十一全链路压测流程概览
  3. 机器学习算法——决策树3(CART决策树算法)
  4. 微信公众号开发-公众号支付
  5. odoo 密码加密 解析
  6. 初中七年级上计算机试题答案,初中信息技术考试试题(含答案).docx
  7. 百度云盘海外版免费不限速,就是国内不能用!
  8. Activiti7事件监听
  9. Typora 下载方法(windows/ linux)
  10. laravel较优雅的分表关联查询(性能较好,SQL的数量=表的数量,涵盖了较多laravel手册推荐的方法)...