Files
MRFishingMaster/Assets/_FishingMaster/Scripts/Statue/README_StatueSystem.md

260 lines
8.5 KiB
Markdown
Raw 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.
# 海底雕像事件系统 - 设置文档
## 系统概述
海底雕像事件是一个周期性的收集玩法:
- 每60秒生成3个漂流瓶从不同角度游入
- 击中漂流瓶后,碎片带拖尾光效飞到石像位置
- 石像由10个碎片组成初始不显示飞到一个显示一个
- 10个碎片都到达后石像拼凑完成
- 完成后材质从灰色变为彩色,播放完成特效
- 共3个雕像集齐后事件结束
## 核心脚本
### 1. DriftBottle.cs - 漂流瓶
挂载在漂流瓶预制体上,控制漂流瓶的移动和被击中逻辑。
### 2. DriftBottleManager.cs - 管理器(单例)
管理漂流瓶的生成、雕像进度、事件状态。
### 3. DriftBottlePathGenerator.cs - 路径生成器
动态生成3条不同角度的漂流瓶移动路径。
### 4. DriftBottleBulletHit.cs - 子弹击中检测
处理子弹和AOE伤害对漂流瓶的击中判定。
### 5. FragmentFlyEffect.cs - 碎片飞行效果
碎片从漂流瓶位置飞到石像位置的动画效果(带拖尾)。
### 6. StatueAssembler.cs - 石像拼凑器
管理石像碎片的显示和拼凑动画,控制材质变化和完成特效。
## Unity场景设置步骤
### 步骤1创建碎片飞行特效预制体
1. 创建空物体 `FragmentFlyEffect`
2. 添加组件 `FragmentFlyEffect.cs`
3. 添加子物体:
- **Trail**: ParticleSystem拖尾效果
- 使用发光材质
- 设置拖尾长度和颜色
- **Light**: Point Light发光效果
- 颜色:金色或蓝色
- 范围2-3米
- **Mesh**: 碎片模型(可选)
- 小石块或水晶模型
4. 保存为预制体
### 步骤2创建石像预制体
1. 创建空物体 `Statue_01`
2. 添加组件 `StatueAssembler.cs`
3. 配置参数:
- **Statue Index**: 0
- **Statue Name**: 海神雕像
- **Total Fragments**: 10
- **Fragment Meshes**: 10个碎片模型
- 将完整石像模型拆成10个子物体
- 按顺序放入数组0-9
- **Gray Material**: 灰色/石质材质
- **Color Material**: 彩色/金色材质
- **Complete Effect**: 完成时的粒子特效
- **Glow Effect**: 发光效果物体
- **Complete Light**: 完成时的光照
4. 复制创建另外2个石像Statue_02, Statue_03
### 步骤3创建漂流瓶预制体
1. 在场景中创建一个空物体,命名为 `DriftBottle`
2. 添加组件:
- `DriftBottle.cs`
- `DriftBottleBulletHit.cs`
- `SplineController` (来自Curvy插件)
- Collider (BoxCollider或SphereCollider勾选IsTrigger)
- Rigidbody (勾选IsKinematic)
3. 添加模型作为子物体:
- 创建一个子物体 `Model`
- 添加漂流瓶3D模型
4. 添加特效:
- 创建子物体 `HitEffect`添加ParticleSystem破碎效果
5.`DriftBottle` 拖入Project窗口创建预制体
### 步骤4创建漂流瓶管理器
1. 在场景中创建一个空物体,命名为 `DriftBottleManager`
2. 添加组件 `DriftBottleManager.cs`
3. 配置参数:
- **Spawn Interval**: 60 (生成间隔秒数)
- **Spawn Count Per Wave**: 3 (每次生成数量)
- **Drift Bottle Prefab**: 步骤3创建的预制体
- **Fragment Fly Prefab**: 步骤1创建的飞行特效预制体
- **Statue Transforms**: 拖拽3个石像物体
- **Statue Show Offset**: 石像相对于玩家的位置偏移
### 步骤5创建路径生成器
1. 在场景中创建一个空物体,命名为 `DriftBottlePathGenerator`
2. 添加组件 `DriftBottlePathGenerator.cs`
3. 配置参数:
- **Path Count**: 3 (路径数量)
- **Start Distance**: 12 (起始距离)
- **End Distance**: 8 (结束距离)
- **Horizontal Spread**: 60 (水平分散角度,左-30°、中0°、右+30°)
- **Vertical Height**: 2 (垂直高度)
### 步骤6设置层级和碰撞
1. 创建新层级 `DriftBottle`
2. 将漂流瓶预制体设置为 `DriftBottle` 层级
3. 确保子弹的LayerMask包含 `DriftBottle` 层级
### 步骤7配置音效
在GameManager中配置以下音效名称
- `漂流瓶出现` - 每次生成时播放
- `漂流瓶破碎` - 击中漂流瓶时播放
- `碎片到达` - 碎片飞到石像时播放
- `石像完成` - 石像拼凑完成时播放
- `雕像事件完成` - 所有雕像完成时播放
## 石像预制体结构参考
```
Statue_01 (Root)
├── StatueAssembler.cs
├── Fragment_01 (碎片1 - 初始隐藏)
│ └── MeshRenderer (灰色材质)
├── Fragment_02 (碎片2 - 初始隐藏)
│ └── MeshRenderer (灰色材质)
├── ... (共10个碎片)
├── Fragment_10 (碎片10 - 初始隐藏)
│ └── MeshRenderer (灰色材质)
├── CompleteEffect (完成粒子特效 - 初始隐藏)
├── GlowEffect (发光效果 - 初始隐藏)
└── CompleteLight (光照 - 初始隐藏)
```
## 碎片飞行特效预制体结构
```
FragmentFlyEffect (Root)
├── FragmentFlyEffect.cs
├── Trail (ParticleSystem - 拖尾)
│ ├── 发光材质
│ └── 拖尾设置
├── Light (PointLight - 发光)
└── Mesh (碎片模型 - 可选)
```
## 关键配置参数说明
### DriftBottleManager 配置
| 参数 | 默认值 | 说明 |
|------|--------|------|
| spawnInterval | 60 | 每60秒生成一波漂流瓶 |
| spawnCountPerWave | 3 | 每次生成3个分散在不同路径 |
| totalStatues | 3 | 总共3个雕像需要收集 |
| fragmentsPerStatue | 10 | 每个雕像需要10个碎片 |
### FragmentFlyEffect 配置
| 参数 | 默认值 | 说明 |
|------|--------|------|
| flyDuration | 1.5s | 碎片飞行时间 |
| flyHeight | 3m | 飞行弧线高度 |
| rotateSpeed | 720°/s | 碎片旋转速度 |
### StatueAssembler 配置
| 参数 | 默认值 | 说明 |
|------|--------|------|
| totalFragments | 10 | 石像由10个碎片组成 |
| grayMaterial | - | 未激活时的灰色材质 |
| colorMaterial | - | 完成后的彩色材质 |
| materialTransitionDuration | 1s | 材质变化时间 |
## 视觉效果流程
1. **漂流瓶生成**每60秒从3个角度游入3个漂流瓶
2. **击中漂流瓶**:播放破碎效果
3. **碎片飞出**:带拖尾光效的碎片从漂流瓶位置飞出
4. **飞行过程**:碎片沿弧线飞向石像位置,持续旋转发光
5. **到达石像**:碎片弹跳一下后消失
6. **显示碎片**石像上对应位置的碎片显示出来从缩放0弹出
7. **重复10次**10个碎片依次显示
8. **石像完成**
- 10个碎片材质从灰色渐变为彩色
- 播放完成粒子特效
- 石像震动并发光
- 播放完成音效
## 调试功能
`DriftBottleManager` 中开启 `Debug Mode` 后:
- 按键盘 `B` 键可以立即生成一波漂流瓶
## 事件流程
1. 游戏开始10秒后启动雕像事件
2. 立即生成第一波3个漂流瓶碎片1-3
3. 开始60秒倒计时
4. 玩家击中漂流瓶,碎片飞向他对应的石像
5. 碎片到达后,石像上显示对应碎片
6. 60秒后生成第二波3个漂流瓶碎片4-6
7. 重复直到所有30个碎片生成完毕
8. 收集完10个碎片后石像拼凑完成播放完成动画
9. 继续收集完成第二、第三个石像
10. 所有石像完成后,事件结束,不再生成漂流瓶
## 代码集成示例
### 监听雕像事件
```csharp
void Start()
{
if (DriftBottleManager.Instance != null)
{
DriftBottleManager.Instance.OnStatueCompleted += OnStatueCompleted;
DriftBottleManager.Instance.OnAllStatuesCompleted += OnAllStatuesCompleted;
}
}
void OnStatueCompleted(int statueIndex)
{
Debug.Log($"石像 {statueIndex + 1} 拼凑完成!");
// 发放奖励等
}
void OnAllStatuesCompleted()
{
Debug.Log("所有石像收集完成!");
// 发放最终奖励
}
```
## 注意事项
1. **石像模型**需要将完整石像模型拆分成10个子模型每个对应一个碎片
2. **材质设置**灰色材质和彩色材质需要有相同的Shader以便平滑过渡
3. **拖尾效果**FragmentFlyEffect的拖尾ParticleSystem需要设置合适的材质和参数
4. **性能优化**最多同时存在3个漂流瓶和3个飞行碎片对性能影响很小
5. **位置设置**石像位置可以通过statueTransforms数组设置或使用默认的偏移计算
## 扩展建议
1. **不同碎片形状**每个石像的10个碎片可以有不同的形状
2. **飞行路径**:可以自定义碎片的飞行路径(曲线、螺旋等)
3. **完成奖励**:石像完成后可以掉落金币或宝箱
4. **音效增强**:可以为不同石像配置不同的完成音效
5. **特效增强**:完成时可以添加震动、闪光等效果