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

143 lines
4.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 Multiplier``Water Gravity Scale``Water Ground Friction`
-`BP_HeronPlayerState` 中将 `Mallard Ability Class` 设置为你的蓝图类
### 在 C++ 中调整参数
如果要在特定情况下动态调整参数,可以:
```cpp
// 获取 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` 中添加:
```cpp
if (bIsSwimming) {
// 生成水花粒子效果
// UGameplayStatics::SpawnEmitterAtLocation(...)
}
```
### 添加游泳动画
`EnterWater()` 中:
```cpp
// 切换到游泳动画
if (ACharacter* Character = Cast<ACharacter>(GetOwner())) {
// 设置游泳动画状态
}
```
### 添加水深检测
可以扩展系统支持不同水深:
- 浅水:可以站立
- 深水:必须游泳
- 根据水深动态调整参数
## 配合系统
MallardAbility 与以下系统协同工作:
- **HeronPlayer**:水体碰撞检测
- **HeronPlayerState**:能力切换管理
- **CharacterMovementComponent**:移动参数调整
## 注意事项
1. 水体 Actor 必须有 "Water" 标签
2. 参数调整会影响游戏手感,建议多次测试
3. 如果在蓝图中创建子类,确保父类设置正确
4. 切换能力时会自动处理水中状态,无需手动管理