11 KiB
11 KiB
亡灵灯笼 - 游戏设计文档
🎮 游戏概述
游戏名称: 亡灵灯笼 (Soul Lantern)
游戏类型: 2.5D 冒险解谜 + 生存收集
核心玩法: 探索黑暗迷宫 → 收集亡灵 → 躲避怪物和陷阱 → 解救亡灵
视觉风格: 2.5D等距视角,黑暗氛围,灯笼光照效果
目标平台: PC (可扩展到移动端)
🎯 核心游戏循环
1. 探索阶段
- 玩家在黑暗迷宫中探索
- 灯笼提供有限视野
- 铃铛声会吸引怪物
2. 收集阶段
- 找到被困的亡灵
- 使用技能将亡灵收入灯笼
- 灯笼亮度和铃铛范围增加
3. 危险阶段
- 怪物被铃声吸引,开始追击
- 触发陷阱和机关
- 需要躲避或战斗
4. 逃脱阶段
- 找到出口或传送门
- 切换到下一张地图
- 保存进度
🕹️ 玩家系统
1. 灯笼系统 (Lantern System)
核心道具: 魔法灯笼
| 属性 | 初始值 | 升级方式 |
|---|---|---|
| 照亮范围 | 5m | 收集亡灵后增加 |
| 铃铛范围 | 10m | 收集亡灵后增加 |
| 亡灵容量 | 3个 | 升级灯笼 |
| 特殊技能CD | 10秒 | 升级技能 |
功能:
- ✅ 照明: 提供周围视野(已实现LightMaskSystem)
- ✅ 铃铛: 按E释放声波(已实现EchoSystem)
- ✅ 收集: 靠近亡灵时自动收入灯笼
- ✅ 技能: 按Q释放"灵魂冲击"(范围眩晕)
视觉效果:
灯笼亮度 = 基础亮度 + (亡灵数量 × 单个亡灵亮度)
视野半径 = 5m + (亡灵数量 × 2m)
铃铛半径 = 10m + (亡灵数量 × 3m)
2. 玩家属性
| 属性 | 说明 |
|---|---|
| 生命值 | 3颗心(被怪物碰到扣1颗) |
| 移动速度 | 5单位/秒 |
| 闪避能力 | 空格键翻滚(短暂无敌) |
| 技能CD | 10秒(可升级减少) |
3. 技能系统
技能1: 灵魂冲击 (Soul Shock)
- 按键: Q
- CD: 10秒
- 效果: 以玩家为中心,释放灵魂波动
- 范围内怪物眩晕3秒
- 可以打断怪物攻击
- 可以触发陷阱(提前引爆)
- 范围: 8m(随亡灵数量增加)
技能2: 灵魂护盾 (Soul Shield) - 解锁
- 解锁条件: 收集10个亡灵
- 按键: 右键
- CD: 15秒
- 效果: 生成护盾,抵挡1次伤害
技能3: 灵魂传送 (Soul Teleport) - 解锁
- 解锁条件: 收集20个亡灵
- 按键: 双击空格
- CD: 20秒
- 效果: 短距离传送(10m内)
👹 敌人系统
1. 怪物类型
基于已实现的 EnemyAI.cs,扩展以下怪物类型:
游荡者 (Wanderer)
- 行为: 在固定路径巡逻
- 视野: 15m(已实现maxSightDistance)
- 速度: 3m/s
- 特点: 被铃声吸引(已实现BellResponding)
- 弱点: 移动缓慢,容易躲避
守卫者 (Guardian)
- 行为: 站岗不动,看到玩家追击
- 视野: 20m
- 速度: 4m/s
- 特点: 攻击范围广,伤害高
- 弱点: 只能直线攻击,可以绕柱躲避
猎手 (Hunter)
- 行为: 快速追击,会预判玩家位置
- 视野: 25m
- 速度: 6m/s
- 特点: 会呼叫其他怪物
- 弱点: 血量低,可以被灵魂冲击击杀
Boss: 暗影领主 (Shadow Lord)
- 行为: 多阶段战斗
- 视野: 全图
- 特殊能力:
- 阶段1: 召唤小怪
- 阶段2: 黑暗领域(缩小玩家视野)
- 阶段3: 灵魂锁链(减速玩家)
2. 怪物AI增强
基于现有 EnemyAI.cs,添加以下功能:
// 新增状态
private enum State
{
Idle,
ChasingPlayer,
ChasingBell,
PatrollingBell,
Stunned, // 眩晕(灵魂冲击)
Searching, // 搜索玩家(丢失视线后)
Returning // 返回巡逻点
}
// 新增参数
[Header("搜索行为")]
[SerializeField] private float searchDuration = 5f; // 搜索时间
[SerializeField] private float returnDistance = 10f; // 返回距离
[Header("攻击行为")]
[SerializeField] private float attackRange = 1.5f; // 攻击范围
[SerializeField] private float attackCooldown = 2f; // 攻击CD
[SerializeField] private int damage = 1; // 伤害值
新增行为:
- ✅ 搜索: 丢失玩家视线后,在附近搜索5秒
- ✅ 返回: 搜索失败后,返回巡逻点
- ✅ 攻击: 靠近玩家时发动攻击
- ✅ 眩晕: 被灵魂冲击击中后眩晕3秒
🗺️ 关卡设计
1. 地图系统
地图结构: 多个迷宫地图,通过传送门切换
地图1: 废弃墓穴 (新手教程)
- 大小: 50x50m
- 特点: 简单迷宫,少量怪物
- 亡灵数量: 5个
- 陷阱: 地刺(固定位置)
- 目标: 教学基本操作
地图2: 幽暗森林
- 大小: 80x80m
- 特点: 复杂迷宫,视野受限
- 亡灵数量: 10个
- 陷阱: 地刺 + 飞箭
- 新元素: 可破坏的墙壁
地图3: 地下神殿
- 大小: 100x100m
- 特点: 多层结构,机关谜题
- 亡灵数量: 15个
- 陷阱: 所有陷阱 + 移动平台
- 新元素: 机关门(需要激活)
地图4: 暗影领域 (Boss战)
- 大小: 60x60m
- 特点: 开阔场地,Boss战
- 亡灵数量: 0(专注Boss)
- 陷阱: 无
- 目标: 击败暗影领主
2. 陷阱系统
地刺 (Ground Spikes)
public class GroundSpikes : MonoBehaviour
{
[SerializeField] private float damage = 1f;
[SerializeField] private float triggerRange = 1f;
[SerializeField] private float cooldown = 3f;
// 触发方式: 玩家踩上
// 效果: 扣1颗心,短暂无敌
}
飞箭 (Flying Arrow)
public class FlyingArrow : MonoBehaviour
{
[SerializeField] private float speed = 10f;
[SerializeField] private float damage = 1f;
[SerializeField] private float lifetime = 5f;
// 触发方式: 玩家进入触发区域
// 效果: 从固定方向发射箭矢
}
落石 (Falling Rock)
public class FallingRock : MonoBehaviour
{
[SerializeField] private float warningTime = 1f;
[SerializeField] private float damage = 1f;
[SerializeField] private float radius = 2f;
// 触发方式: 玩家进入区域
// 效果: 警告1秒后落石,范围伤害
}
3. 亡灵系统
亡灵类型
普通亡灵:
- 外观: 半透明人形
- 行为: 被困在笼子/结界中
- 收集: 靠近后自动收入灯笼
- 效果: 灯笼亮度+1,铃铛范围+2m
特殊亡灵:
- 战士亡灵: 提供战斗技能
- 法师亡灵: 提供魔法护盾
- 盗贼亡灵: 提供传送技能
亡灵数据结构
[System.Serializable]
public class SoulData
{
public string soulName; // 亡灵名称
public SoulType soulType; // 类型: 普通/战士/法师/盗贼
public int level; // 等级
public float brightnessBonus; // 亮度加成
public float rangeBonus; // 范围加成
public string specialAbility; // 特殊能力
}
🎨 UI系统
1. HUD (抬头显示)
┌─────────────────────────────────────┐
│ ❤❤❤ 🕐 00:12:34 │
│ │
│ [游戏画面] │
│ │
│ 🔦 灯笼: ████░░ 4/6 亡灵 │
│ ⚡ 技能: 就绪 (10s CD) │
│ 🗺️ 地图: 废弃墓穴 │
└─────────────────────────────────────┘
2. 灯笼UI
- 图标: 灯笼图标
- 进度条: 显示当前亡灵数量/容量
- 亮度指示: 动态光圈大小
3. 技能UI
- 图标: 技能图标
- CD指示: 灰色覆盖层 + 倒计时数字
- 快捷键: Q / 右键 / 双击空格
4. 地图UI
- 小地图: 右上角显示已探索区域
- 任务标记: 显示亡灵位置和出口
💾 存档系统
1. 存档数据
[System.Serializable]
public class SaveData
{
public int currentMapIndex; // 当前地图索引
public Vector3 playerPosition; // 玩家位置
public int playerHealth; // 玩家生命
public List<SoulData> collectedSouls; // 收集的亡灵
public float lanternBrightness; // 灯笼亮度
public float bellRange; // 铃铛范围
public float skillCooldown; // 技能CD
public Dictionary<string, bool> mapProgress; // 地图进度
}
2. 存档点
- 存档水晶: 在地图中分布
- 自动存档: 到达新地图时
- 手动存档: 在存档水晶处按F
🎵 音效系统
1. 环境音效
| 场景 | 音效 |
|---|---|
| 墓穴 | 风声、滴水声、远处哀嚎 |
| 森林 | 树叶沙沙声、猫头鹰叫 |
| 神殿 | 回声、机关运转声 |
| Boss战 | 紧张BGM、Boss咆哮 |
2. 交互音效
| 行为 | 音效 |
|---|---|
| 铃铛 | 清脆铃声(已实现) |
| 收集亡灵 | 灵魂吸收音 |
| 技能释放 | 灵魂爆发音 |
| 受伤 | 痛苦呻吟 |
| 陷阱触发 | 机械触发音 |
📊 游戏平衡
1. 难度曲线
地图1 (废弃墓穴):
- 怪物数量: 3
- 陷阱数量: 5
- 亡灵数量: 5
- 难度: ★☆☆☆☆
地图2 (幽暗森林):
- 怪物数量: 6
- 陷阱数量: 10
- 亡灵数量: 10
- 难度: ★★☆☆☆
地图3 (地下神殿):
- 怪物数量: 10
- 陷阱数量: 15
- 亡灵数量: 15
- 难度: ★★★☆☆
地图4 (暗影领域):
- 怪物数量: 1 (Boss)
- 陷阱数量: 0
- 亡灵数量: 0
- 难度: ★★★★★
2. 资源平衡
灯笼容量:
- 初始: 3个亡灵
- 地图1后: 6个亡灵
- 地图2后: 9个亡灵
- 地图3后: 12个亡灵
技能CD:
- 初始: 10秒
- 每收集5个亡灵: -1秒
- 最低: 5秒
🚀 开发优先级
Phase 1: 核心玩法 (2周)
- ✅ 灯笼系统(照明+铃铛)- 已实现
- ✅ Enemy AI(视觉+铃声)- 已实现
- ⏳ 玩家移动和碰撞
- ⏳ 亡灵收集逻辑
Phase 2: 战斗系统 (1周)
- ⏳ 灵魂冲击技能
- ⏳ 怪物攻击逻辑
- ⏳ 玩家受伤和无敌帧
Phase 3: 关卡设计 (2周)
- ⏳ 地图1: 废弃墓穴
- ⏳ 陷阱系统(地刺、飞箭)
- ⏳ 亡灵分布
Phase 4: UI和存档 (1周)
- ⏳ HUD系统
- ⏳ 存档功能
- ⏳ 地图切换
Phase 5: 扩展内容 (2周)
- ⏳ 地图2-4
- ⏳ 更多怪物类型
- ⏳ Boss战
🎯 下一步行动
基于现有代码,建议按以下顺序开发:
-
玩家控制器增强
- 添加生命值系统
- 添加技能系统(灵魂冲击)
- 添加灯笼升级逻辑
-
亡灵系统
- 创建亡灵预制体
- 实现收集逻辑
- 实现灯笼亮度动态调整
-
陷阱系统
- 创建地刺预制体
- 创建飞箭预制体
- 实现陷阱触发逻辑
-
地图系统
- 创建地图1(废弃墓穴)
- 实现地图切换逻辑
- 添加传送门
-
UI系统
- 创建HUD
- 添加灯笼和技能UI
- 添加小地图
这个设计充分利用了你已经实现的功能:
- ✅ 黑暗遮罩系统 (LightMaskSystem)
- ✅ 回声系统 (EchoSystem)
- ✅ Enemy AI (EnemyAI.cs)
- ✅ Y-Sort排序
- ✅ 地面裁剪Shader
- ✅ 2.5D摄像机系统
需要我帮你实现哪个部分?