[UE4]虚幻4引擎实现类似永劫无间的钩锁系统

基于UE4实现类似永劫无间的钩锁系统,主要介绍一下思路,抛砖引玉,欢迎交流!

项目展示https://www.bilibili.com/video/BV16S4y1S7GU?share_source=copy_web

总览

总体使用有限状态机实现,包括状态内处理和状态转换两部分。

为表述清晰,后文将钩锁连接在人物一端称为A端,发射出去的一端称为B端

钩锁利用UE4自带的Cable组件实现,比较重要的是两个参数LocationEnd Location分别为钩锁两端的位置,我们利用前者作为B端,后者作为A端

有限状态机:

转换箭头的两侧分别为状态转换的条件和状态转换时进行的(主要)操作,高亮为输入信号

包含四个状态:其他状态瞄准状态钩锁发射状态人物移动状态

其中后三个状态内皆需要进行状态内处理(每帧):

瞄准状态

进行射线检测,检测距离内钩锁能否命中,若能命中则改变准星的形状

钩锁发射状态:

每帧改变钩锁B端的位置,实现发射的效果

人物移动状态:

  • 由于钩锁在 ThirdPersonCharacter 内,因此随人物移动,钩锁也会改变位置,所以要根据人物移动改变钩锁位置,实现钩锁B端的固定效果
  • 随人物向钩锁B端移动缩短钩锁长度
  • 给人物一个朝向钩锁B端的速度,使之朝B端移动
  • 检测移动过程中是否被阻挡

实现细节

瞄准

瞄准逻辑

实现按Q键进行瞄准,当钩锁能够命中时改变准星的形状,瞄准时缩小Field Of View

因为牵扯到HUD的变化,我们用蓝图接口传递两个布尔变量到HUD,分别表示是否在瞄准状态和钩锁能否命中。根据这两个变量值决定是否绘制准星和准星的形状

HUD蓝图:

瞄准时缩小视角利用两个事件来控制,以便当视角变化到一半停止瞄准也能正常回到正常视角而不是跳变

瞄准的输入控制

与其他输入不同,瞄准的输入在钩锁发射和人物移动过程中是要关闭的(发射钩锁时让视角回到正常状态)

利用一个Gate实现输入控制,同时还可以进行与HUD蓝图的通信

状态0–其他状态

状态0内不需要做任何处理,只需根据输入转换状态即可

状态1–瞄准状态

状态内处理

状态1中需要进行射线检测,检测射程内钩锁能否命中,并将检测结果以变量的形式保存下来,命中结果发送给HUD

状态转换

两种情况,一种松开Q键回到状态0,一种进入钩锁发射状态

进入钩锁发射状态时需要顺序执行四个操作

  1. 关闭瞄准状态
  2. 设置钩锁B端的位置(若命中则设置为命中位置,未命中则设置为最远距离
  3. 改变角色朝向,令角色朝向摄像机位置
  4. 播放钩锁发射的动画,为保证发射动画过程中角色处于静止,此处将Movement Mode设置为None

状态2–钩锁发射状态

状态内处理

在钩锁移动完成之前,需要每帧更新钩锁B端位置,以实现发射的动画效果,使用VInterp To节点实现平滑过渡

状态转换

钩锁移动完成后,首先改回Movement Mode

  • 若未命中则收回钩锁后回到状态0,同样使用VInterp To节点

  • 若命中则进行一次跳跃并进入状态3

其中Do once节点通过Reset Hook事件重置

此事件用于重置相关变量,便于下次的钩锁发射

状态3–人物移动状态

状态内处理

人物移动完成前

  • 需要每帧改变钩锁B端的位置,以保证钩锁B端在世界坐标下的固定效果
  • 随着人物的移动缩短钩锁的长度
  • 给人物一个向着钩锁B端位置的速度,移动人物。其中这个速度越靠近B端越小
  • 检测前方是否有阻挡,若有阻挡,需将人物的移动速度降低

状态转换

三种情况下人物移动完成,重置钩锁,回到状态0

  • 按下空格,主动终止,此时需降低人物速度
  • 有物体阻挡
  • 人物离钩锁B端够近

结语

至此就完成了一个类似永劫无间的钩锁系统了,在此基础上还可以加上攀爬系统,并设置二段跳实现更灵活的移动

参考资料

https://www.bilibili.com/video/BV1Zt411D7Zt?share_source=copy_web

攀爬系统:https://www.bilibili.com/video/BV1yb4y1o7BY?share_source=copy_web

[UE4]虚幻4蓝图实现类似永劫无间的钩锁系统相关推荐

  1. ue4 曲线图实现 蓝图_UE4虚幻引擎蓝图制作自动开关门(超详细图文教程

    原标题:UE4虚幻引擎蓝图制作自动开关门(超详细图文教程 自己花费了一天多的时间来编写和整理这篇图文教程,相信看了后能轻松学会使用蓝图制作会自动开关的单开门的,大家可以举一反三,尝试使用蓝图制做双开关 ...

  2. UE4虚幻引擎开发手机游戏

    该文章来自用户转载 点击阅读原文 UE4虚幻引擎作为游戏开发引擎之一,在很多项目中都会使用到.下面就给大家分享下如何使用UE4开发高品质的手机游戏. 作者介绍 大纲 •介绍 •UE4 针对3A级手游的 ...

  3. 虚幻4蓝图快速入门(一)

    蓝图快速入门 序言 本文依据官方教程总结而来,只是带你对蓝图有一个快速的认识,如果想对蓝图有一个比较深入的了解,那么可以看官方的视频或者是做一些小项目练手,如果你有编程经验的话,上手还是很容易的. 蓝 ...

  4. 揭秘 MWU 最佳画质游戏《永劫无间》技术历程

    近日知名人工智能计算公司英伟达(Nvidia)发布了一部"第一款使用 DLSS 技术的 Unity 游戏"<永劫无间>DLSS 宣传片. DLSS 技术能渲染低分辨率的 ...

  5. ue4怎么用虚幻商城场景_【更新】UE4虚幻引擎野外场景制作零基础入门教程

    原标题:[更新]UE4虚幻引擎野外场景制作零基础入门教程 作为一套零基础入门教程,可以帮助虚幻4引擎的新手了解到环境制作流程和相关软件的配合.本教学适合零基础入门用户,不适合有一定经验的UE使用者. ...

  6. UE4 虚幻4游戏程序编程开发零基础视频教程

    UE4虚幻腾讯课堂丁树凯丁老师游戏程序编程开发零基础视频教程. 目录: 第01季:虚幻4基础操作 第02季:用UE4蓝图制作FPS 第03季:面向对象思想在UE4蓝图中的应用 第04季:UE4中的人工 ...

  7. UE4虚幻引擎关于小地图制作教程

    UE4虚幻引擎关于小地图制作教程 首先,要做一个这样子的效果! 怎么做呢! 首先,我们要准备UI! 小地图,我们的分辨率是512x512 记住参数! 然后在MainUI当中!我们就可以这么设置! 一个 ...

  8. 虚幻四蓝图知识点汇总(Base)

    文章目录 前言 蓝图类结构 比对代码结构 事件图表 函数 函数创建 纯函数 调用 宏 事件 变量 继承 多态 实例 引用区分 手足/起源问题 总结 前言 前面我们对蓝图的操作有了大概的认识,那么接下来 ...

  9. 【学习笔记】Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞教程

    教程链接:Unreal Engine 4 虚幻引擎蓝图中级教程物理碰撞 想共享的小伙伴可以E-mail我:lxbcolorgalaxy@qq.com 目录 第一章 常见的物理现象及分析 1蓝图模板中的 ...

最新文章

  1. Qt利用avilib实现录屏功能_利用“别名”实现Sendmail的邮件群发和邮件备份功能...
  2. c++不允许使用不完整的类型
  3. oracle 按某个字段分类汇总,[数据库]Oracle语句分类汇总
  4. 第八章 Python 对象和类
  5. intouch负值显示0_excel表格数据为负值取0-在EXCEL表格中怎么把负数显示为0?公式怎么设置?...
  6. java获取spring数据源_Spring动态注册多数据源的实现方法
  7. ansi c标准_C语言为什么需要有标准库
  8. 图解HTTP笔记(一)
  9. React Mixin
  10. 2021-06-06滚动条de面板
  11. 动网论坛 php版,动网即将推出第二代PHP版本论坛系统
  12. 第六届蓝桥杯A组C/C++ 第三题 奇妙的数字
  13. Python-Curses模块
  14. 唯一标识 微信小程序_微信小程序中用户唯一ID的获取
  15. 【Linux驱动开发】PS2游戏手柄驱动开发与输入子系统框架
  16. 数字孪生智慧高铁研究案例
  17. 设计模式六大原则详解
  18. 【Python全栈测试开发实战1】搭建测试开发环境
  19. PHP经典实例读书笔记--变量
  20. Elesticsearch基础

热门文章

  1. mininet应用实践
  2. java jtable 排序_解决JTable排序问题的方法详解
  3. LaTeX不能识别eps文件?
  4. 【C#+打印组件】实现电商快递单打印系统 一:功能展示、系统介绍(附源码和资源)
  5. 关于sqlmap的一些命令
  6. (01)JS大法好,JavaScript一统天下开篇
  7. 集美大学c语言大作业,集美大学c语言练习题
  8. 防封号低风险,跨境电商必须了解的WhatsApp Business API指南
  9. NoSQL应用场景及Cassandra架构实现分析
  10. 输入金额校验(数字非负数保留2位不四舍五入)