不明不惑
不明不惑
发布于 2025-08-05 / 6 阅读
0

与GameplayAbilities配合使用

本文转载自Yuewu(罗传月武)发布的文章,如有侵权,请联系我删除

介绍

Mover和GAS目前是两个独立的系统。但它们都有属于自己的网络预测、输入机制。

而目前官方提供的资源中,只有泰坦项目充分展示了GAS和Mover如何搭配使用。

泰坦项目分析

本文分析泰坦项目中的一些运动行为是如何通过GAS和Mover配合实现的,供你参考。

属性

泰坦在属性部分,没有使用GameplayAttribute。

输入

采用DA配置InputAction->Tag的映射,并在InputAction回调中以Action为Key查到对应的Tag,然后作为GameplayEvent发送给ASC。

EventTag则是输入Tag,InstigatorTags包含输入的类型,按下,启动中,还是松开。

拓展点子

此思路非常值得学习,InputAction->GampelayEvent的方式可以让输入和技能之间解耦,而非一一捆绑方式。

冲刺

Sprint作为被动的LocalOnly技能实现,当输入按下/松开触发时,修改的是TitanPawn上用于生成Mover输入参数的缓存值。

瞄准

Aim作为被动的LocalOnly技能实现,并监听输入事件

跳跃

思维拓展

我认为,PorduceInput时,要为所有输入类型定义对应的bool来决定按下与否有些繁琐重复。

可以用一个Tag容器,InputAction事件回调直接往Tag容器添加对应输入标签。ProduceInput中直接检查某输入Tag是否存在来判定输入是否按下。

避免使用CharacterMoverComponent

Mover插件中内置了CharacterMoverComponent,并封装了Crouch(通过StanceModifer),Jump行为。这个类试图平替原本的Character类所具备的能力。而Mover插件中的其他代码并没有对CharacterMovementComponent和StanceModifer产生大量引用。

因此,我建议避免使用CharacterMoverComponent,转而使用更加纯粹的MoverComponent。

然后,其他的行为如Jump,Crouch等,采用GAS实现。

使用GAS代理MoverComponent输入层

Mover的默认MovementSet(Walking,Falling,)

除了CharacterDefaultInputs所封装的基础控制