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

8.5 KiB
Raw Blame History

海底雕像事件系统 - 设置文档

系统概述

海底雕像事件是一个周期性的收集玩法:

  • 每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. 所有石像完成后,事件结束,不再生成漂流瓶

代码集成示例

监听雕像事件

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. 特效增强:完成时可以添加震动、闪光等效果