Files
ggj26_heron/Docs/MallardAbility使用说明.md

4.4 KiB
Raw Permalink Blame History

MallardAbility鸭子能力使用说明

功能概述

MallardAbility 是专为鸭子Mallard设计的能力系统使其能够在水中游泳并且可以自定义水中移动参数。

核心功能

1. 水中游泳

  • 只有鸭子能在水中游泳:其他鸟类碰到水会死亡
  • 自动调整移动参数:进入水中时自动调整速度、重力和摩擦力
  • 自动恢复参数:离开水中时恢复原始移动参数

2. 可调整的水中参数

WaterSpeedMultiplier水中速度倍率

  • 默认值0.880%的正常速度)
  • 作用:控制在水中游泳的速度
  • 调整建议
    • 0.5 - 慢速游泳,更真实
    • 0.8 - 默认,略微减速
    • 1.0 - 与陆地速度相同
    • 1.2 - 水中游得更快

WaterGravityScale水中重力缩放

  • 默认值0.330%的正常重力)
  • 作用:让鸭子在水中更容易浮起
  • 调整建议
    • 0.1 - 几乎漂浮,非常轻
    • 0.3 - 默认,有浮力感
    • 0.5 - 稍微下沉
    • 1.0 - 正常重力,会下沉

WaterGroundFriction水中摩擦力

  • 默认值2.0
  • 作用:控制在水中停止移动的速度
  • 调整建议
    • 1.0 - 低摩擦,滑行距离长
    • 2.0 - 默认,适度摩擦
    • 4.0 - 高摩擦,立即停止

使用方法

在蓝图中调整参数

  1. 打开 BP_HeronPlayerState 蓝图(或你的 PlayerState 蓝图)
  2. 在 Details 面板中找到 Mallard Ability Class
  3. 如果需要自定义参数:
    • 创建一个继承自 MallardAbility 的蓝图类BP_MallardAbility
    • 在蓝图中调整 Water Speed MultiplierWater Gravity ScaleWater Ground Friction
    • BP_HeronPlayerState 中将 Mallard Ability Class 设置为你的蓝图类

在 C++ 中调整参数

如果要在特定情况下动态调整参数,可以:

// 获取 MallardAbility
if (UMallardAbility* MallardAbility = Cast<UMallardAbility>(PlayerState->CurrentAbility)) {
    // 动态调整水中速度
    MallardAbility->WaterSpeedMultiplier = 1.2f;
    
    // 如果已经在水中,需要重新应用参数
    if (MallardAbility->bIsSwimming) {
        MallardAbility->ExitWater();
        MallardAbility->EnterWater();
    }
}

工作流程

进入水中

  1. HeronPlayer 检测到与标签为 "Water" 的 Actor 碰撞
  2. 检查当前能力是否为 Mallard
  3. 如果是 Mallard调用 EnterWater()
  4. MallardAbility 保存原始移动参数
  5. 应用水中移动参数(速度 × 倍率、降低重力、调整摩擦力)

离开水中

  1. HeronPlayer 检测到离开标签为 "Water" 的 Actor
  2. 调用 MallardAbility 的 ExitWater()
  3. 恢复原始移动参数

切换能力时在水中

  • 如果从 Mallard 切换到其他能力且在水中,会自动调用 ExitWater() 恢复参数
  • 如果切换到非 Mallard 能力且在水中,会触发死亡

调试建议

日志输出

系统会输出以下日志,可在 Output Log 中查看:

  • "MallardAbility: Entered Mallard ability - Can swim in water!" - 切换到鸭子能力
  • "MallardAbility: Entered water - Swimming mode activated!" - 进入水中
  • "MallardAbility: Exited water - Normal movement restored" - 离开水中

实时查看参数

在编辑器 Play 模式下:

  1. 选中玩家角色
  2. 在 Details 面板中找到 MallardAbility 组件
  3. 展开 Mallard|Swimming 分类
  4. 可以看到 bIsSwimming 状态和当前参数

扩展建议

添加水花特效

TickComponent 中添加:

if (bIsSwimming) {
    // 生成水花粒子效果
    // UGameplayStatics::SpawnEmitterAtLocation(...)
}

添加游泳动画

EnterWater() 中:

// 切换到游泳动画
if (ACharacter* Character = Cast<ACharacter>(GetOwner())) {
    // 设置游泳动画状态
}

添加水深检测

可以扩展系统支持不同水深:

  • 浅水:可以站立
  • 深水:必须游泳
  • 根据水深动态调整参数

配合系统

MallardAbility 与以下系统协同工作:

  • HeronPlayer:水体碰撞检测
  • HeronPlayerState:能力切换管理
  • CharacterMovementComponent:移动参数调整

注意事项

  1. 水体 Actor 必须有 "Water" 标签
  2. 参数调整会影响游戏手感,建议多次测试
  3. 如果在蓝图中创建子类,确保父类设置正确
  4. 切换能力时会自动处理水中状态,无需手动管理