8.5 KiB
8.5 KiB
海底雕像事件系统 - 设置文档
系统概述
海底雕像事件是一个周期性的收集玩法:
- 每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:创建碎片飞行特效预制体
- 创建空物体
FragmentFlyEffect - 添加组件
FragmentFlyEffect.cs - 添加子物体:
- Trail: ParticleSystem(拖尾效果)
- 使用发光材质
- 设置拖尾长度和颜色
- Light: Point Light(发光效果)
- 颜色:金色或蓝色
- 范围:2-3米
- Mesh: 碎片模型(可选)
- 小石块或水晶模型
- Trail: ParticleSystem(拖尾效果)
- 保存为预制体
步骤2:创建石像预制体
-
创建空物体
Statue_01 -
添加组件
StatueAssembler.cs -
配置参数:
- Statue Index: 0
- Statue Name: 海神雕像
- Total Fragments: 10
- Fragment Meshes: 10个碎片模型
- 将完整石像模型拆成10个子物体
- 按顺序放入数组(0-9)
- Gray Material: 灰色/石质材质
- Color Material: 彩色/金色材质
- Complete Effect: 完成时的粒子特效
- Glow Effect: 发光效果物体
- Complete Light: 完成时的光照
-
复制创建另外2个石像(Statue_02, Statue_03)
步骤3:创建漂流瓶预制体
-
在场景中创建一个空物体,命名为
DriftBottle -
添加组件:
DriftBottle.csDriftBottleBulletHit.csSplineController(来自Curvy插件)- Collider (BoxCollider或SphereCollider,勾选IsTrigger)
- Rigidbody (勾选IsKinematic)
-
添加模型作为子物体:
- 创建一个子物体
Model - 添加漂流瓶3D模型
- 创建一个子物体
-
添加特效:
- 创建子物体
HitEffect,添加ParticleSystem(破碎效果)
- 创建子物体
-
将
DriftBottle拖入Project窗口创建预制体
步骤4:创建漂流瓶管理器
- 在场景中创建一个空物体,命名为
DriftBottleManager - 添加组件
DriftBottleManager.cs - 配置参数:
- Spawn Interval: 60 (生成间隔秒数)
- Spawn Count Per Wave: 3 (每次生成数量)
- Drift Bottle Prefab: 步骤3创建的预制体
- Fragment Fly Prefab: 步骤1创建的飞行特效预制体
- Statue Transforms: 拖拽3个石像物体
- Statue Show Offset: 石像相对于玩家的位置偏移
步骤5:创建路径生成器
- 在场景中创建一个空物体,命名为
DriftBottlePathGenerator - 添加组件
DriftBottlePathGenerator.cs - 配置参数:
- Path Count: 3 (路径数量)
- Start Distance: 12 (起始距离)
- End Distance: 8 (结束距离)
- Horizontal Spread: 60 (水平分散角度,左-30°、中0°、右+30°)
- Vertical Height: 2 (垂直高度)
步骤6:设置层级和碰撞
- 创建新层级
DriftBottle - 将漂流瓶预制体设置为
DriftBottle层级 - 确保子弹的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 | 材质变化时间 |
视觉效果流程
- 漂流瓶生成:每60秒从3个角度游入3个漂流瓶
- 击中漂流瓶:播放破碎效果
- 碎片飞出:带拖尾光效的碎片从漂流瓶位置飞出
- 飞行过程:碎片沿弧线飞向石像位置,持续旋转发光
- 到达石像:碎片弹跳一下后消失
- 显示碎片:石像上对应位置的碎片显示出来(从缩放0弹出)
- 重复10次:10个碎片依次显示
- 石像完成:
- 10个碎片材质从灰色渐变为彩色
- 播放完成粒子特效
- 石像震动并发光
- 播放完成音效
调试功能
在 DriftBottleManager 中开启 Debug Mode 后:
- 按键盘
B键可以立即生成一波漂流瓶
事件流程
- 游戏开始10秒后,启动雕像事件
- 立即生成第一波3个漂流瓶(碎片1-3)
- 开始60秒倒计时
- 玩家击中漂流瓶,碎片飞向他对应的石像
- 碎片到达后,石像上显示对应碎片
- 60秒后生成第二波3个漂流瓶(碎片4-6)
- 重复直到所有30个碎片生成完毕
- 收集完10个碎片后,石像拼凑完成,播放完成动画
- 继续收集完成第二、第三个石像
- 所有石像完成后,事件结束,不再生成漂流瓶
代码集成示例
监听雕像事件
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("所有石像收集完成!");
// 发放最终奖励
}
注意事项
- 石像模型:需要将完整石像模型拆分成10个子模型,每个对应一个碎片
- 材质设置:灰色材质和彩色材质需要有相同的Shader,以便平滑过渡
- 拖尾效果:FragmentFlyEffect的拖尾ParticleSystem需要设置合适的材质和参数
- 性能优化:最多同时存在3个漂流瓶和3个飞行碎片,对性能影响很小
- 位置设置:石像位置可以通过statueTransforms数组设置,或使用默认的偏移计算
扩展建议
- 不同碎片形状:每个石像的10个碎片可以有不同的形状
- 飞行路径:可以自定义碎片的飞行路径(曲线、螺旋等)
- 完成奖励:石像完成后可以掉落金币或宝箱
- 音效增强:可以为不同石像配置不同的完成音效
- 特效增强:完成时可以添加震动、闪光等效果