RPC游戏案例【2. 动作交互】

人物状态

本章工程文件为:RPG_Tutorial_Series_04,如遇问题可下载工程文件之后自行对照

预期效果:完善人物的血条,蓝条和经验条,按Alt键能快走,同时耗蓝,正常情况下恢复蓝

image-20230430175803937

状态组件

创建一个Actor组件,命名为BPC_Player_stats

image-20230430175831087

创建如下变量和函数

image-20230430175958728

各函数逻辑如下

image-20230430180358251

image-20230430180104492

image-20230430180119876

image-20230430180133881

image-20230430180159431

image-20230430180213794

image-20230430180227438

image-20230430180250963

image-20230430180301909

HUD

在UI文件夹下创建一个WBP_HUD

image-20230430180435887

image-20230430180526019

image-20230430180539613

image-20230430180552257

image-20230430180602705

image-20230430180614488

image-20230430180624253

image-20230430180632060

人物Pawn

打开BP_ThirdPersonCharacter

修改碰撞预设

image-20230430181725945

image-20230430181739519

打开事件蓝图,补充逻辑

image-20230430180802453

添加BPC_Player_Stats组件

image-20230430180841089

打开Input文件夹,创建一个输入资产,命名为IA_Sprint,然后打开IMC_Default,添加如下的输入映射

image-20230430181055960

回到BP_ThirdPersonCharacter,补充如下逻辑,在普通状态下以固定速度回蓝

image-20230430180937138

加速跑逻辑

image-20230430180926644

优化逻辑

image-20230430181001797

最后复制一个动画

image-20230430181432588

增大比率范围

image-20230430181457921

打开之前的混合空间

image-20230430181537594

应用上这个动画,这样加速跑的时候,人物的双腿就动的更快

image-20230430181607939

连招

本章工程文件为:RPG_Tutorial_Series_05,如遇问题可下载之后自行对照

预期效果:玩家多次点击鼠标,可以触发连招

image-20230430224426492

首先把连招动作导入RPC_Character/Animations/SwordAttacks文件夹内

image-20230430222339847

image-20230430212305456

把每个动画的启用跟运动都打开

image-20230430222423142

然后选中所有动画,右键,一键创建蒙太奇

在编辑蒙太奇之间,先创建两个通知蓝图,命名为 AnimNotify_SwordCombo 和 AnimNotify_SwordComboEnd

image-20230430214144194

分别重写他们的Received Notify函数

image-20230430223108884

image-20230430223128670

打开Attack1_Montage,在轨道1上创建上面新建的通知

image-20230430223258400

打开Attack2_Montage

image-20230430223349994

打开Kick_Montage

image-20230430223432335

打开Attack3_Montage

image-20230430223540254

上面动画素材准备好之后,我们再补充一些逻辑

首先打开Input文件夹,创建一个输入操作数据资产,命名为IA_Attack

打开IMC_Default,新增一个启用连招的触发条件,同时修改一下暗杀的触发条件

image-20230518155420222

接着回到Blueprints文件夹,创建一个Actor组件,命名为BPC_AttackSystem

在事件图表中补充如下逻辑

image-20230430222849480

image-20230430222910068

image-20230430223639627

到这里就已经基本实现连招的逻辑了,接下来我们再把人物的剑补上

在工程中创建一个Sword文件夹,然后导入Resource里面的Sword文件夹资产

image-20230430223807052

导入之后,右键Sword_Base_Color,创建一个材质,命名为M_Sword

image-20230430223905567

image-20230430224000865

将这个材质应用到模型上

image-20230430224038886

打开人物骨骼,选中hand_r,创建一个插槽,然后添加Sword为预览资产,将这把剑摆放到合适的位置

image-20230430224123406

最后在BP_ThirdPersonCharacter上应用这把剑,就大功告成了

image-20230430224245725

命中反应

本章工程文件为:RPG_Tutorial_Series_06,如遇问题可下载之后自行对照

预期效果:玩家对敌人发动攻击,敌人会有受伤反应

image-20230518210545337

首先把反应动作导入RPC_Character/Hit_Reacts文件夹内

image-20230518163356663

image-20230501155625992

image-20230518163410130

刀剑碰撞

为了检测我们在挥刀的过程中,刀是否碰到了敌人,我们需要在刀身上加两个箭头组件

image-20230518163534897

image-20230518163548404

然后打开BPC_AttackSystem,编写如下逻辑,用于检测刀身是否碰到了敌人

image-20230518163713008

在这边加上调用,然后运行看看检测效果

image-20230518163942983

可以看到,当刀穿过敌人的时候,就会变绿,说明碰撞已经被检测到了

image-20230518164017232

但是我们不能这么草率的在蓝图中直接调用检测逻辑,而是需要用动画通知来实现

所以删掉这个调用

image-20230518164154300

再完善一下追踪逻辑

image-20230518170055250

创建一个动画通知状态,命名为BP_Notify_SwordTrace_Loop

image-20230518163154208

image-20230518164742645

image-20230518170122612

image-20230518170133066

接着打开蒙太奇,应用这个动画通知状态

image-20230518170253011

image-20230518170329433

接着再运行案例,就会发现,角色只有播放到对应的动画位置时,才会检测刀身碰撞

image-20230518170435376

打开BP_Dummy,给敌人打上一个标签Damageable,用于检测碰撞的对象是否为敌人

image-20230518205332506

再创建一个摄像机晃动,命名为BP_Sword_HitCameraShake

image-20230518204318054

image-20230518205446059

将敌人检测和摄像机晃动逻辑补充到AttackSystem里,完成蓝图如下

image-20230518205601354

image-20230518205616837

身体碰撞

上面的逻辑里只检测了刀剑碰撞,连招中还有踢击和穿刺需要检测

打开BP_ThirdPersonCharacter,添加一个箭头组件,用于检测前方位置

image-20230518205733068

打开BPC_AttackSystem,创建一个身体碰撞的事件

image-20230518205934126

接下来再创建一个动画通知,命名为BP_Notify_SphereTrace

image-20230518195351370

image-20230518210015855

将这个动画通知应用到蒙太奇中

image-20230518210102155

image-20230518210122469

最后在敌人蓝图里,加上一点冲击力就好了

image-20230518210313868

其中hitAnims变量是一个蒙太奇数组,里面默认定义了两个受伤反应的动画

image-20230518210411284