UE4类黑魂锁定系统

黑魂的锁定系统不说完美,但对于一个强调实时对敌人出招做出反应的游戏来讲,已经算不错了。除了预设的锁定位置可能不够好,视角及“瞎几把滚”之外,锁定系统起到的作用还是相当不错的,至少大幅减少了玩家在战斗中控制角色轴向带来的蛋疼问题。

几个主要功能如下:镜头方向寻查及锁定敌人、锁定后永面对敌人、摄像机随敌人移动而移动、自动调整玩家人物轴向。

在制作锁定系统时,参考了President Nelson的《Alice In Tokyo Wonderland》关于锁定的部分思路。本篇文章的结尾会列出他的几个视频。相比Get All Actor Of Class节点,我使用了形状追踪,这样范围更可控一些。在场景内的Actor数量很多时,相比前者节点更省资源。单线追踪相对获取目标敌人来说不是非常适合,判定要比形状追踪更苛刻。

一、获取敌人

这里使用CapsuleTraceForObjects来获取是否有敌人在范围内,Ignore Targets变量来无视当前目标(如果有多个目标在当前范围内),Object Types选择Pawn来确保追踪只获得敌人,而不是所有场景内的物体都会被捕获。Break Hit Result节点内,Hit Actor单独做了一个判定,确保获得了一个Actor,否则返回什么都没获取。然后进入LineTraceByChannel做二次判定,由当前玩家角色位置到上个节点获得的敌人位置发射一条射线,确保两者之间没有墙等场景物体的遮挡。

20170322_01_GetTarget.jpg

如果以上两次判定均成功,则返回已获得目标的结果,将获得的Actor变量传递到Return节点内。由外部蓝图做其它工作。

关于切换锁定目标,如果获取敌人做的足够好的话,只需要重新执行一次获取敌人功能即可,这也是我为什么设置Ignore Targets变量的原因。

20170322_03_GetTargetCharBP.jpg (来自角色蓝图)

二、锁定敌人

锁定敌人方面有一个缺点就是需要每帧都调用此功能。基于Tick事件来每次调用节点获得最新的敌人位置并调整角色及摄像机轴向。

RInterp To是个首选节点来调整摄像机的观看轴向,Interp Speed变量数字越大,轴向调整速度越快,数字越小速度越慢,与敌人轴向越大这一副作用越明显。此变量是Float属性,也就是说支持小数,具体数值的大小自行摸索最佳。

接下来使用Set Control Rotation 来设置玩家角色轴向,并且记住此处需要把玩家的Movement Component下的Orient Rotation to Movement设为False。

然后继续使用LineTraceByChannel来追踪玩家与敌人之间的位置和遮挡,来决定是否返回被遮挡。

20170322_02_LookTarget.jpg (来自锁定蓝图)

![20170322_04_LookTargetDelta.jpg](https://vip2.loli.io/2022/09/10/VlJ4WFn7pTx21Ig.jpg (来自角色蓝图)

三、取消锁定

这方面的判定依照项目更多变化一些,我自己这边主要做了遮挡与距离判定和长按取消锁定。主要思路就是,在取消锁定时,通知敌人父类Class来取消锁定,清空当前锁定目标,将判定锁定的布尔值设为False。即在之前锁定敌人时对角色做的判定与修改设置做一个反向修改。将部分值还原为锁定前的状态。

20170322_05_LockOff.jpg

其它资料:

参考视频:https://www.youtube.com/watch?v=D7r12VBs8Qs https://www.youtube.com/watch?v=RSTctK1u1nM&t=9s 关于追踪的相关引擎文档:https://docs.unrealengine.com/latest/INT/Gameplay/HowTo/UseRaycasts/Blueprints/index.html

© 2011 - 2023 熊窝 基于 Hugo 构建,使用 NordTheme For Hugo 主题