167 lines
4.6 KiB
Markdown
167 lines
4.6 KiB
Markdown
# 夜鹭滑翔能力使用说明
|
||
|
||
## 概述
|
||
`UHeronGlideAbility` 是一个为夜鹭角色设计的滑翔能力组件,允许角色在空中滑翔,并在撞到墙壁(TileMap)时停止滑翔并掉落。
|
||
|
||
## 功能特性
|
||
- ✨ 空中滑翔:角色在跳跃后可以开始滑翔
|
||
- 🧱 墙壁检测:自动检测TileMap墙壁和其他静态物体的碰撞
|
||
- 📉 撞墙掉落:撞到墙壁后立即停止滑翔,恢复正常重力
|
||
- ⚙️ 可调参数:重力缩放、滑翔速度、下落速度等均可在编辑器中调整
|
||
|
||
## 如何使用
|
||
|
||
### 1. 在蓝图中添加能力组件
|
||
|
||
在HeronPlayer蓝图中:
|
||
1. 打开 `BP_HeronPlayer` (或你的角色蓝图)
|
||
2. 点击 "Add Component"
|
||
3. 搜索并添加 `HeronGlideAbility`
|
||
4. 在BeginPlay事件中,将该组件赋值给 `CurrentAbility` 变量
|
||
|
||
**蓝图示例:**
|
||
```
|
||
BeginPlay
|
||
├─> Get Component by Class (HeronGlideAbility)
|
||
└─> Set CurrentAbility
|
||
```
|
||
|
||
### 2. C++中使用
|
||
|
||
在 `HeronPlayer.cpp` 的 `BeginPlay()` 中添加:
|
||
|
||
```cpp
|
||
void AHeronPlayer::BeginPlay() {
|
||
Super::BeginPlay();
|
||
|
||
// 查找并设置滑翔能力
|
||
CurrentAbility = FindComponentByClass<UHeronGlideAbility>();
|
||
|
||
if (CurrentAbility) {
|
||
CurrentAbility->OnEnterAbility();
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. 调整参数
|
||
|
||
在编辑器中选中 `HeronGlideAbility` 组件,可以调整以下参数:
|
||
|
||
| 参数名 | 默认值 | 说明 |
|
||
|--------|--------|------|
|
||
| `GlideGravityScale` | 0.3 | 滑翔时的重力缩放(越小浮空越明显) |
|
||
| `GlideSpeed` | 400.0 | 滑翔时的水平速度 |
|
||
| `GlideFallSpeed` | 100.0 | 滑翔时的最大下落速度 |
|
||
| `NormalGravityScale` | 1.0 | 正常状态的重力缩放 |
|
||
|
||
## 控制说明
|
||
|
||
### 空格键操作
|
||
- **在地面按空格**:跳跃
|
||
- **在空中按空格**:开始滑翔
|
||
- **滑翔时按空格**:停止滑翔(手动取消)
|
||
- **撞到墙壁**:自动停止滑翔并掉落
|
||
- **落地**:自动停止滑翔
|
||
|
||
💡 **操作提示**:滑翔是切换模式,不需要一直按住空格!一个空格键实现跳跃和滑翔的所有操作。
|
||
|
||
## 实现细节
|
||
|
||
### 墙壁检测机制
|
||
- 使用球形射线追踪(Sphere Sweep)检测前方障碍物
|
||
- 检测距离:50单位
|
||
- 检测半径:20单位
|
||
- 能识别:
|
||
- ✅ TileMap组件
|
||
- ✅ 静态网格体
|
||
- ❌ 动态物体(不会触发停止滑翔)
|
||
|
||
### 物理效果
|
||
滑翔时:
|
||
- 重力缩放降低到 `GlideGravityScale`
|
||
- 下落速度被限制在 `GlideFallSpeed` 以内
|
||
- 水平速度保持在 `GlideSpeed`
|
||
|
||
停止滑翔时:
|
||
- 重力缩放恢复到 `NormalGravityScale`
|
||
- 速度恢复正常物理模拟
|
||
|
||
## 调试日志
|
||
|
||
能力在运行时会输出以下日志信息:
|
||
- `"夜鹭滑翔能力已激活"` - 能力被激活
|
||
- `"夜鹭滑翔能力已停用"` - 能力被停用
|
||
- `"开始滑翔"` - 角色开始滑翔
|
||
- `"停止滑翔"` - 角色停止滑翔
|
||
- `"滑翔时撞到TileMap墙壁!"` - 检测到TileMap碰撞
|
||
- `"滑翔时撞到墙壁!"` - 检测到其他墙壁碰撞
|
||
|
||
## 扩展建议
|
||
|
||
### 添加滑翔动画
|
||
在 `StartGlide()` 和 `StopGlide()` 中调用PaperZD动画:
|
||
```cpp
|
||
void UHeronGlideAbility::StartGlide() {
|
||
// ...existing code...
|
||
|
||
// 播放滑翔动画
|
||
if (APaperZDCharacter* Character = Cast<APaperZDCharacter>(GetOwner())) {
|
||
// Character->GetAnimInstance()->PlayAnimationOverride(GlideAnimation);
|
||
}
|
||
}
|
||
```
|
||
|
||
### 添加粒子效果
|
||
在滑翔时生成风的粒子效果:
|
||
```cpp
|
||
UPROPERTY(EditAnywhere, Category = "Glide Settings")
|
||
UParticleSystem* GlideParticle;
|
||
|
||
UParticleSystemComponent* GlideParticleComponent;
|
||
```
|
||
|
||
### 添加音效
|
||
```cpp
|
||
UPROPERTY(EditAnywhere, Category = "Glide Settings")
|
||
USoundBase* GlideStartSound;
|
||
|
||
UPROPERTY(EditAnywhere, Category = "Glide Settings")
|
||
USoundBase* GlideLoopSound;
|
||
```
|
||
|
||
## 常见问题
|
||
|
||
**Q: 为什么角色无法开始滑翔?**
|
||
A: 确保:
|
||
1. `CurrentAbility` 已正确设置
|
||
2. 角色处于空中(不在地面上)
|
||
3. 已正确绑定动作输入
|
||
|
||
**Q: 撞墙后没有停止滑翔?**
|
||
A: 检查:
|
||
1. 墙壁是否为静态物体(Mobility = Static)
|
||
2. 墙壁是否有碰撞体积
|
||
3. 调整检测距离 `TraceDistance` 和半径 `SphereRadius`
|
||
|
||
**Q: 滑翔感觉太快/太慢?**
|
||
A: 调整以下参数:
|
||
- `GlideGravityScale` - 控制浮空程度
|
||
- `GlideFallSpeed` - 控制下落速度
|
||
- `GlideSpeed` - 控制前进速度
|
||
|
||
## 文件结构
|
||
```
|
||
Source/ggj26_heron/Ability/
|
||
├── BirdAbilityBase.h # 能力基类头文件
|
||
├── BirdAbilityBase.cpp # 能力基类实现
|
||
├── HeronGlideAbility.h # 滑翔能力头文件
|
||
└── HeronGlideAbility.cpp # 滑翔能力实现
|
||
```
|
||
|
||
## 版本历史
|
||
- v1.0 (2026-01-31): 初始版本
|
||
- 基础滑翔功能
|
||
- TileMap墙壁检测
|
||
- 可调参数
|
||
|