260 lines
8.5 KiB
Markdown
260 lines
8.5 KiB
Markdown
# 海底雕像事件系统 - 设置文档
|
||
|
||
## 系统概述
|
||
|
||
海底雕像事件是一个周期性的收集玩法:
|
||
- 每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. **特效增强**:完成时可以添加震动、闪光等效果
|