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