这一篇的内容对应视频教程:

  • UE4 Climb System - Tutorial - Part 3 - Side Jumps & Corner Detection
  • UE4 Climb System - Tutorial - Part 4 - Jump Up & Turn back

工程地址:【github】UE4_ClimbSystem。


飞跃到相邻墙壁的功能实现


在Tick里面增加飞跃检测,需要注意的是当左右移动的碰撞检测没有检测到墙壁才进行飞跃的检测,这样可以节省性能。

方法内部:

LeftLedgeArrow是角色的ArrowComponent,这个Component会在预览窗口显示箭头,实际运行是看不到的。当我们需要一些表示方向的变量时就可以使用这个组件,比直接使用FVector更直观一点。

接着回到跳跃键的回调函数,现在我们跳跃键已经有很多功能了

  • 平地普通跳跃(系统自带)
  • 悬挂时爬上边缘(上一篇文章)
  • 跳到相邻墙壁(方向键+跳跃)
  • 回头反向跳(后面会加入)

当功能复杂时,代码就容易混乱。先来看视频作者怎么做的:

  • 判断是否为悬挂,为false时进行普通跳跃
  • 悬挂时判断是否可以回头跳
  • 不可以回头跳时判断是否可以向右跳
  • 可以向右跳时判断玩家输入,右输入大于0,向右跳,否则爬上边缘
  • 不可以向右跳时判断是否可以向左跳
  • 可以向左跳时判断玩家输入,左输入大于0,向左跳,否则爬上边缘
  • 不可以向左跳时判断可以向上跳(这个功能因为实现太简单已经被我删了,所以不提了)

不知道你们什么感受,我当时跟着教程做的时候人已经麻了。这绝对是屎山的前兆。

如果功能再加几个,顺序再颠倒一下,比如现在想加一个按下+跳跃可以取消悬挂的功能。那维护这个代码真的是噩梦,稍微一不小心就可以漏掉几种可能性。作为有追求的游戏程序员,我们不能放任这种屎山存在。所以我对它进行重构,重构完之后是这样的:

  • 首先把跳跃的逻辑包装成方法
  • Sequence罗列多种可能
  • 满足情况A时走对应逻辑,然后return,这样就不会走下面所有逻辑
  • 将来如果添加新的状态,只需要Sequence再加一个输出引脚就可以了

这样写就很清晰,在进行飞跃检测的时候我不需要知道后面还有什么逻辑,反正我成功之后我就return了。我想改顺序也很方便,只要把Sequence的输出引脚换一下位置就可以了。

Bug记录

1、飞跃后位置不对
这是因为我们在飞跃过程中我们也进行悬挂检测,这样的话悬挂目标点会一直停在当前墙壁上,应该当我们飞跃到旁边的墙壁后再进行悬挂检测。

在HangTracer里面需要增加下面节点判断当前是否有在播放Montage(保险起见我们让播放Montage时都不进行悬挂检测):

2、飞跃后动画状态不正确
可以看到虽然我们位置正确了,但是动画不对。原因是播放Montage会打断当前动画机,而播放完成后会重新运行动画机,动画机的初始状态是Idle,如果缺少Idle到Hanging的转换条件就会出现这个Bug。上一篇文章我们不需要这个条件,因为上一篇文章用到Montage的地方是用在爬上边缘这个功能,而爬上边缘以后是回到Idle的。


墙角拐弯的功能实现

角色蓝图

在Tick里面增加墙角拐弯检测:

里面还是用碰撞检测判断是否是墙角,如果检测不到墙壁,说明是墙角。

有墙角的情况下按下A或者D播放Montage,播放完成后抓取边缘。


回头反向跳的功能实现


按下S键时对TurnedBack取反(回头状态),再判断是否是回头状态,如果不是,退出悬挂状态。按下W键取消回头状态。

把角色蓝图的TurnBack传到动画蓝图,在动画蓝图里增加TurnBack和TurnBackLoop状态。

然后在跳跃键回调方法里增加回头跳的功能:

使用LaunchCharacter节点给角色一个后上方的速度把角色发射出去,同时设置角色Rotation为当前Rotation绕Z轴转180度。


总结

到这里的话对这个系列教程UE4 Climb System - Tutorial的总结就写完了。本身视频就在一个小时左右,所以做的功能还是比较粗糙和简单的。但是可以提升不少UE的使用熟练度(比如播放Montage有三种方式我以前都不知道),还可以总结到很多在实战项目里一样会遇到的问题。比如按下一个按键要实现很多功能时代码容易很乱,或者是多种动画状态互相影响的问题(播A时不能播B,A播完以后要进入C状态,播C时又想要可以中断C进入D状态,诸如此类)。特别是动作游戏开发时,这类问题真的不要太多。
下一篇文章打算做别的攀爬功能。像这两篇实现的攀爬功能,都是基于悬挂边缘功能的扩展开发,主要是用于本身不能爬墙的游戏多一点(比如PUBG)。而如果能够自由爬墙(比如塞尔达、原神),没有所谓的悬挂功能,就又是另一套逻辑了。


关于作者

  • 我是水曜日鸡,一个爱好二次元的游戏程序员,大家都习惯叫我鸡佬。曾参与索尼中国之星项目《硬核机甲》的开发。 目前在某大厂做UE4项目。

欢迎来我建的群891809847一起聊游♂戏,我的群还蛮大的。

【UE·GamePlay篇】攀爬系统系列教程(二)——相邻墙壁飞跃、墙角拐弯、回头反向跳相关推荐

  1. ue4——攀爬系统的实现与总结

    攀爬系统概述 运用场景 在许多动作类游戏中,攀爬系统作为动作系统的一部分为游戏提供了更多的玩法.如"跑酷系统"."躲避系统"."轻功系统". ...

  2. QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现

    QT5系列教程二---基于qcustomplot的QT5 GUI串口收发绘图软件实现 结构 UI部分 代码部分 step1:实现串口数据接受 串口接受数据格式 在`.pro`文件中添加`serialp ...

  3. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  4. 以太坊构建DApps系列教程(二):构建TNS代币

    在本系列关于使用以太坊构建DApps教程的第1部分中,我们引导大家做了两个版本的本地区块链进行开发:一个Ganache版本和一个完整的私有PoA版本. 在这一部分中,我们将深入研究并构建我们的TNS代 ...

  5. Cocoapods系列教程(二)——开源主义接班人

    原文地址:Cocoapods系列教程(二)--开源主义接班人 引言 在写该博客的时候,博主刚看到一个问题:"那些头衔只是看起来很厉害,实际不难获得?".然后有个神回复写到:&quo ...

  6. 汇川技术小型PLC梯形图编程系列教程(二):AutoShop软件使用技巧介绍

    原文链接:汇川技术小型PLC梯形图编程系列教程(二):AutoShop软件使用技巧介绍 俗话说的好,磨刀不误砍柴工.这里的刀指的是准备工作:手册+熟练使用软件(掌握一些技巧).所以本篇为大家简单介绍一 ...

  7. 2021年淘宝客系列教程(二)事前准备

    2021年淘宝客系列教程(二)事前准备 本系列立志于将淘宝客如何在微信公众号/微信机器人这类基础上运作,到最后开发一个完整的淘宝客系统而编写,如有雷同,纯属借鉴~ 2021年淘宝客系列教程(一)淘宝客 ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  9. Python必应壁纸爬取系列(二):Bing唯美壁纸太多不知道选哪个?Python五行代码随机帮你挑选必应唯美屏保壁纸图片

    上一篇文章我们讲述了如何爬取必应的当天壁纸,那么今天我们就来实现如何写出一个随机必应壁纸或区域的程序.有了这个程序,我们就可以按照自己的喜好添加自己喜欢的文件并且下载了 五行代码实现程序效果图 文章目 ...

最新文章

  1. ASP.NET专题研究——角色和Profile
  2. Redis相比memcached
  3. ssl提高组周六模拟赛【2018.9.15】
  4. MediaWiki初探:安装及使用入门
  5. 最新(2019)斯坦福CS224n深度学习自然语言处理课程(视频+笔记+2017年合集)
  6. 拓端tecdat|互联网热门职位薪资对比报告
  7. 【Udacity笔记】What is Machine Learning?
  8. 易语言精益模块json_易语言Json解析
  9. mssql2000sp4 sql injection
  10. Java+Swing实现自助取款机(ATM)系统-TXT存储数据
  11. 软考高项-项目管理师知识点整合
  12. pyqtgraph 案例 002 Basic Plotting
  13. win7 访问局域网共享文件时提示输入网络凭据 设置开机免输入凭证进入共享盘设置
  14. 张雪峰:创业团队极速发展过程中的分分合合
  15. vant的安装和引入
  16. 计算机应用基础实训报告excel,excel实验报告模板
  17. 利用PDF编辑软件给PDF添加页码的操作全过程
  18. 【小记】人生若只如初见
  19. Redis5.0+——集群搭建,水平扩容
  20. 华为服务器TS200-2280安装HBA卡

热门文章

  1. 微商大咖不轻易透露的操作秘诀
  2. Adobe Flash Player安装遇上错误:未能初始化的解决方法
  3. pam模块之faillock
  4. hive:函数:trim
  5. 想知道手机视频压缩app哪个好用?这几个工具值得一试
  6. 【随笔】IT圈的头衔泡沫
  7. 使用FastReport设计分组汇总及合计报表(图文)
  8. No matching version found for @soda/friendly-errors-webpack-plugin@1.8.0.
  9. 采购货物和服务的有效步骤
  10. 基于GUI的AWT,Swing写的一个餐厅点菜系统