5.3 KiB
5.3 KiB
PenguinAbility(企鹅能力)使用说明
功能概述
PenguinAbility 是专为企鹅(Penguin)设计的能力系统,使其能够在冰面上滑行加速。
核心功能
1. 冰面滑行
- 企鹅在冰面上加速:移动速度提升至 1.5 倍
- 更低的摩擦力:让企鹅在冰面上滑得更远
- 自动调整移动参数:进入冰面时自动调整速度和摩擦力
- 自动恢复参数:离开冰面时恢复原始移动参数
2. 可调整的冰面参数
IceSpeedMultiplier(冰面速度倍率)
- 默认值:1.5(150%的正常速度)
- 作用:控制在冰面上的移动速度
- 调整建议:
- 1.2 - 轻微加速
- 1.5 - 默认,明显加速
- 2.0 - 极速滑行
- 2.5 - 超高速(谨慎使用)
IceGroundFriction(冰面摩擦力)
- 默认值:0.5(低摩擦力,更滑)
- 作用:控制在冰面上停止移动的速度
- 调整建议:
- 0.2 - 极滑,很难停下
- 0.5 - 默认,冰面滑行感
- 1.0 - 轻度滑行
- 2.0 - 接近正常摩擦
使用方法
在蓝图中调整参数
- 打开
BP_HeronPlayerState蓝图(或你的 PlayerState 蓝图) - 在 Details 面板中找到
Penguin Ability Class - 如果需要自定义参数:
- 创建一个继承自
PenguinAbility的蓝图类(BP_PenguinAbility) - 在蓝图中调整
Ice Speed Multiplier和Ice Ground Friction - 在
BP_HeronPlayerState中将Penguin Ability Class设置为你的蓝图类
- 创建一个继承自
在编辑器中设置冰面
- 创建一个 Actor 作为冰面(可以使用 Box Trigger 或 Box Collision)
- 在该 Actor 的 Details 面板中找到 Tags 部分
- 添加标签 "Ice"
在 C++ 中动态调整参数
// 获取 PenguinAbility
if (UPenguinAbility* PenguinAbility = Cast<UPenguinAbility>(PlayerState->CurrentAbility)) {
// 动态调整冰面速度
PenguinAbility->IceSpeedMultiplier = 2.0f;
// 如果已经在冰面上,需要重新应用参数
if (PenguinAbility->bIsOnIce) {
PenguinAbility->ExitIce();
PenguinAbility->EnterIce();
}
}
工作流程
进入冰面
- HeronPlayer 检测到与标签为 "Ice" 的 Actor 碰撞
- 检查当前能力是否为 Penguin
- 如果是 Penguin,调用
EnterIce() - PenguinAbility 保存原始移动参数
- 应用冰面移动参数(速度 × 1.5、降低摩擦力)
离开冰面
- HeronPlayer 检测到离开标签为 "Ice" 的 Actor
- 调用 PenguinAbility 的
ExitIce() - 恢复原始移动参数
切换能力时在冰面上
- 如果从 Penguin 切换到其他能力且在冰面上,会自动调用
ExitIce()恢复参数 - 其他鸟类在冰面上保持正常移动(不加速)
调试建议
日志输出
系统会输出以下日志,可在 Output Log 中查看:
"PenguinAbility: Entered Penguin ability - Can skate on ice!"- 切换到企鹅能力"PenguinAbility: Entered ice - Ice skating mode activated!"- 进入冰面"PenguinAbility: Exited ice - Normal movement restored"- 离开冰面
实时查看参数
在编辑器 Play 模式下:
- 选中玩家角色
- 在 Details 面板中找到
PenguinAbility组件 - 展开
Penguin|IceSkating分类 - 可以看到
bIsOnIce状态和当前参数
与 MallardAbility 的对比
| 特性 | PenguinAbility | MallardAbility |
|---|---|---|
| 触发标签 | "Ice" | "Water" |
| 速度变化 | 1.5倍加速 | 0.8倍减速 |
| 重力变化 | 无变化 | 降低至0.3 |
| 摩擦力 | 降低至0.5 | 提高至2.0 |
| 非对应能力 | 正常移动 | 死亡 |
扩展建议
添加冰花特效
在 TickComponent 中添加:
if (bIsOnIce) {
// 生成冰花粒子效果
// UGameplayStatics::SpawnEmitterAtLocation(...)
}
添加滑行动画
在 EnterIce() 中:
// 切换到滑行动画
if (ACharacter* Character = Cast<ACharacter>(GetOwner())) {
// 设置滑行动画状态
}
添加滑行音效
在 EnterIce() 中:
// 播放冰面滑行音效
UGameplayStatics::PlaySound2D(this, IceSkatingSound);
实现冰面转弯困难
可以添加转向速度限制:
// 在冰面上降低转向速度
if (bIsOnIce && MovementComp) {
MovementComp->RotationRate = FRotator(0, 180, 0); // 降低转向速度
}
配合系统
PenguinAbility 与以下系统协同工作:
- HeronPlayer:冰面碰撞检测
- HeronPlayerState:能力切换管理
- CharacterMovementComponent:移动参数调整
注意事项
- 冰面 Actor 必须有 "Ice" 标签
- 参数调整会影响游戏手感,建议多次测试
- 如果在蓝图中创建子类,确保父类设置正确
- 切换能力时会自动处理冰面状态,无需手动管理
- 可以同时有水体和冰面,系统会分别处理不同的标签
推荐参数组合
快速滑行(竞速风格)
IceSpeedMultiplier = 2.0
IceGroundFriction = 0.3
真实滑冰感
IceSpeedMultiplier = 1.5
IceGroundFriction = 0.5
轻度加速
IceSpeedMultiplier = 1.2
IceGroundFriction = 1.0
已修复的问题
- ✅ 修复了 HeronPlayerState.cpp 中 Penguin case 创建错误类型的 bug
- ✅ 添加了 break 语句防止 switch fallthrough
- ✅ 集成了 PenguinAbility 到 HeronPlayer 的碰撞检测系统