Passion & UI
This commit is contained in:
315
docs/Action_Roguelike_Analysis.md
Normal file
315
docs/Action_Roguelike_Analysis.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# 头部动作 Roguelike 游戏机制深度分析与 Cielonos 参考设计指南
|
||||
|
||||
本报告针对当前市场上最具代表性的动作 Roguelike(Action Roguelike)系统进行全面剖析。我们重点研究了《绝区零》(零号空洞)、《鸣潮》(深坠异想奇境)、《Hades》(众神恩赐与武器形态)以及《死亡细胞》(属性协同与武器洗练)等标杆作品。报告详细阐述了它们在**局内循环、构筑深度、风险/收益控制、打击反馈**上的优秀实践,并为 Cielonos 提供了一套高度契合世界观(Lore)且具备强可玩性的系统设计落地建议。
|
||||
|
||||
---
|
||||
|
||||
## 1. 代表性动作 Roguelike 模式详解
|
||||
|
||||
### 1.1 《绝区零》:零号空洞 (Hollow Zero)
|
||||
|
||||
《绝区零》的零号空洞将**“复古未来主义的走格子探索”**与**“高频弹刀/强袭的硬核ACT战斗”**深度结合。它通过廉价的2D网格图形化表现,解决了3D大地图制作成本高、探索重复感强的问题,同时利用严格的“时间/资源税”(压力系统)构建了高压力的局内决策流。
|
||||
|
||||
```
|
||||
[ 绝区零:零号空洞系统架构 ]
|
||||
|
|
||||
+------------------------+------------------------+
|
||||
| | |
|
||||
[ TV 棋盘网格探索 ] [ 压力与侵蚀系统 ] [ 鸣徽 (Resonia) 构筑 ]
|
||||
(解谜/隐藏通道/随机事件) (行动增压/恶性词条累加) (类/阶梯构筑,解锁终极核心)
|
||||
```
|
||||
|
||||
#### 1.1.1 核心设计机制
|
||||
1. **电视机棋盘网格探索 (CRT Grid Exploration)**:
|
||||
* **机制描述**:局内探索由 2D 显像管电视机拼接成的网格地图承载。玩家操纵小邦布(系统代理)在网格上移动,每次移动都会揭示相邻网格的类型(战斗、精英、安全、隐藏、商店、援助等)。这种设计将大空间压缩为纯策略维度的“步数规划”。
|
||||
* **设计亮点**:网格具备“地形”与“动态变化”。例如:崩溃网格(走过即消失)、死锁网格(需要钥匙或扣血解锁)、未知网格(带有视觉噪点,需要走上去才揭示)。
|
||||
2. **压力值与侵蚀状态机 (Pressure & Corruption State Machine)**:
|
||||
* **机制描述**:这是限制玩家盲目探索的核心“时间税”机制。玩家每移动一个常规网格,压力值 +10。当压力值达到 100 点时,压力表清空,玩家随机获得一个**“侵蚀效果”(恶性 Debuff)**,最多累积 5 个。
|
||||
* **第五次侵蚀(极性状态)**:当累积第 5 个侵蚀时,进入“极限侵蚀”状态,玩家不仅获得毁灭性负面效果,且每次移动网格将直接扣除角色百分比生命值。这逼迫玩家在规划路径时必须“计算步数”,在贪图资源与控制压力之间做极限权衡。
|
||||
3. **鸣徽流派构筑 (Resonia Class Synergy)**:
|
||||
* **机制描述**:局内 Buff 称为“鸣徽”,分为击破、闪避、护盾、能量、暴击、属性(火/冰/电/物理/以太)等派系。
|
||||
* **催化/进阶机制**:当玩家收集同派系 4 个普通鸣徽后,在下一次休息区或特定事件中,会获得**“催化鸣徽”**,赋予该流派质变级的新机制(例如:改变极限闪避的招式,或使护盾能够反弹子弹)。
|
||||
|
||||
#### 1.1.2 代表性设计实例
|
||||
* **系统设计:压力传导与净化选择**
|
||||
* 在地图中分布着“净化格”和“减压格”。减压格仅减少部分压力值(如 -30),而净化格可以直接清除一个随机侵蚀效果,但通常需要付出昂贵的局内货币(齿轮硬币)作为代价。玩家必须评估当前侵蚀对自身阵容的危害程度,决定是存钱买强力鸣徽还是花钱消灾。
|
||||
* **装备/Buff 设计实例:护盾流(筑壁)鸣徽**
|
||||
* **普通鸣徽 - 【筑壁·安全带】**:玩家触发连携技或极限支援时,获得相当于最大生命值 15% 的护盾,持续 15 秒。
|
||||
* **普通鸣徽 - 【筑壁·钢筋】**:当角色拥有护盾时,抗打断等级提升,且受到的伤害降低 25%。
|
||||
* **进阶鸣徽 - 【筑壁·偏折力场】**:当身上拥有护盾时,所有的受击都会将伤害的 150% 以“震荡波”的形式反弹给攻击者,并对其造成 80 点失衡值(Stance Damage)。这使原本纯防御的护盾转化为进攻和破盾的核心。
|
||||
* **局内队员招募机制**:
|
||||
* 玩家初始只能带一名角色进入空洞。在探索过程中,如果走到“援助格”,可以通过剧情事件招募后备队员。如果队伍已满,则援助格会提供该队员专属的“协战鸣徽”。
|
||||
|
||||
---
|
||||
|
||||
### 1.2 《鸣潮》:深坠异想奇境 (Depths of Illusive Realm)
|
||||
|
||||
《鸣潮》的 Roguelike 模式侧重于**“角色战斗动作的极限质变”**与**“巨型 Boss 级声骸变身带来的视觉爽感”**。它抛弃了复杂的走格子,采用纯粹的动作关卡跳转,将爽快度拉到极致。
|
||||
|
||||
```
|
||||
[ 鸣潮:深坠异想奇境单局循环 ]
|
||||
|
|
||||
+------------------------+------------------------+
|
||||
| | |
|
||||
[ 幻形声骸 (Echo) ] [ 元素隐喻 (Metaphor) ] [ 角色专属特异强化 ]
|
||||
(初始选择,化身Boss轰击) (属性累加解锁爆裂协同) (改写技能C#逻辑与机制)
|
||||
```
|
||||
|
||||
#### 1.2.1 核心设计机制
|
||||
1. **幻形声骸 (Illusive Echo)**:
|
||||
* **机制描述**:单局开始前,玩家选择一个主战声骸(如“无妄者”、“钟鸣龟”、“燎照骑行”)。局内按专属键可释放主战声骸技能。与常规大世界不同,这里的变身持续时间更长,且伴随着改变普攻形态的动作覆写(Motion Overwrite)。
|
||||
2. **元素隐喻堆叠 (Metaphor Deck Building)**:
|
||||
* **机制描述**:隐喻即被动 Buff,分为暗没(暗)、光折(光)、风行(风)、熔山(火)、冷凝(冰)、雷变(雷)。每个隐喻携带对应的“属性值”。当特定属性累积到 4/8/12 时,自动解锁**“终极爆裂协同”**。
|
||||
* **协同质变**:例如冷凝 8 层时,完美闪避会在原地生成一个永久冰圈,持续吸怪并冻结敌人,瞬间把动作游戏的拉扯空间固化为你的优势主场。
|
||||
3. **角色专属特异强化 (Character Exclusive Blessings)**:
|
||||
* **机制描述**:这是该模式的核心可玩性所在。它不仅仅是提供“+20%伤害”的数值牌,而是直接修改角色的核心机制代码和动作逻辑。
|
||||
* **代码级改写例子**:“忌炎”的一张专属强化卡可让其大招期间的重击不再消耗耐力,且每次重击自动生成 3 道追踪飓风。这完全打破了原角色的循环逻辑,实现大世界里无法体验的“官方外挂”体验。
|
||||
|
||||
#### 1.2.2 代表性设计实例
|
||||
* **系统设计:声骸同调与强化面板**
|
||||
* 玩家在战斗关卡结束时获得的“异想样本”(局内代币),可以在关卡间的“重构终端”处对声骸进行“同调”。同调不仅能升级声骸的基础属性,还能为其解锁额外的协战子弹。例如“同调2级”的钟鸣龟在玩家受击时会自动召唤冰刺反击。
|
||||
* **装备/Buff 设计实例:熔山隐喻与燎照骑行**
|
||||
* **声骸技能 - 【燎照骑行】**:变身为摩托骑士,在大范围内进行 3 段连续的火焰冲撞,沿途留下燃烧路径。变身结束后,玩家获得持续 15 秒的火属性伤害加成。
|
||||
* **熔山隐喻 - 【热量传导】**:攻击处于燃烧状态的敌人时,有 15% 的概率在其脚下生成烈焰爆破,造成 300% 的火属性范围伤害。
|
||||
* **熔山级协同 - 【熔山火海(12层解锁)】**:当释放声骸变身或大招时,全场进入“火山爆发”状态,每秒随机降下火流星,点燃所有敌人,并使玩家的攻击必定触发【热量传导】。
|
||||
|
||||
---
|
||||
|
||||
### 1.3 《Hades》:奥林匹斯之重构 (Hades)
|
||||
|
||||
作为俯视角动作 Roguelike 的巅峰之作,《Hades》的核心魅力在于**“众神被动恩赐的化学反应(Duo/双重恩赐)”**与**“武器形态(Aspects)带来的手感彻底解构”**。
|
||||
|
||||
```
|
||||
[ Hades 局内/局外构筑循环 ]
|
||||
|
|
||||
+------------------------+------------------------+
|
||||
| | |
|
||||
[ 众神恩赐 (Boons) ] [ 武器形态 (Aspect) ] [ 惩罚契约 (Pact) ]
|
||||
(普通/稀有/双重协同恩赐) (局外解锁改变手感与机制) (局外自选难度词条赚资源)
|
||||
```
|
||||
|
||||
#### 1.3.1 核心设计机制
|
||||
1. **恩赐双重协同 (Duo Boons)**:
|
||||
* **机制描述**:每个神祇代表一种战斗属性(宙斯-连锁闪电,波塞冬-击退与撞墙伤害,雅典娜-反弹弹幕,阿瑞斯-厄运延迟伤害等)。当玩家在一局中同时集齐两位神祇的“核心恩赐”(如普通攻击和特殊攻击),后续的房间奖励中就有概率刷新出**双重恩赐(Duo Boon)**。
|
||||
* **机制深度**:双重恩赐会把两个神的特性彻底融合,产生指数级强度爆炸。例如“海上风暴”:波塞冬的击退效果直接附带宙斯的闪电链,让怪撞墙的同时遭受雷击,将拉扯打退流变成了超高DPS的清场流。
|
||||
2. **武器形态改变 (Weapon Aspects)**:
|
||||
* **机制描述**:局外通过收集泰坦之血解锁武器的 4 种形态(包括一个隐藏的第四形态)。这不仅是数值提升,而是**彻底替换攻击动画和机制动作**。
|
||||
* **体验解构**:例如“关羽形态”的长枪,普攻变为了缓慢但大范围的旋转斩击,蓄力攻击变为发射一个缓慢前移的圆锯弹幕,且攻击带有吸血效果,但代价是玩家的最大生命值上限直接减半。
|
||||
3. **惩罚契约 (Pact of Punishment)**:
|
||||
* **机制描述**:局外自选难度调节系统。玩家通关一次后,可以主动勾选各种负面协议(如敌人移速增加、陷阱伤害翻倍、商店价格上涨、限制神明出现概率等)来提高“热度(Heat)值”。只有在对应热度下通关,才能获得解锁武器形态所必需的稀有材料。
|
||||
|
||||
#### 1.3.2 代表性设计实例
|
||||
* **系统设计:石榴升级与恩赐稀有度**
|
||||
* 局内获得的“力量石榴”可以提升已选恩赐的等级(Level),而“欧律狄克的一餐”或“雅典娜的洗礼”可以提升恩赐的稀有度(Common -> Rare -> Epic)。等级提升带来线性数值增加,而稀有度提升则带来基础系数的质变,构成了双维度的数值验证。
|
||||
* **装备/Buff 设计实例:双重恩赐组合**
|
||||
* **阿瑞斯(战神)普攻 - 【痛苦诅咒】**:普攻使敌人附着“厄运”标记,1.1 秒后爆发一次 80 点的物理伤害。
|
||||
* **阿特米斯(猎神)投掷 - 【猎人标记】**:伤害敌人后,使其陷入“易损”状态,玩家对其下一次攻击的暴击率提升 50%。
|
||||
* **双重恩赐 - 【撕心裂肺 (Heart Rend)】**:对处于弱化(阿芙洛狄忒)状态的敌人,玩家的所有暴击伤害提升 150%。这引导玩家主动构筑“虚弱+暴击”的技能组合。
|
||||
|
||||
---
|
||||
|
||||
### 1.4 《死亡细胞》:属性协同与词条洗练 (Dead Cells)
|
||||
|
||||
《死亡细胞》是 2D 横版动作 Roguelike 的代表作,其核心在于**“属性红绿紫三分天下”**与**“武器词条高度互锁的 Synergy 协同”**。
|
||||
|
||||
#### 1.4.1 核心设计机制
|
||||
1. **三色属性构筑 (Red/Purple/Green Stats)**:
|
||||
* **机制描述**:局内收集的卷轴允许玩家在暴虐(红-近战爆发)、战术(紫-远程陷阱)、生存(绿-护盾防反重击)三个属性中选择升级。每个属性增加对应颜色装备的伤害,但血量加成比例呈对数衰减。这强迫玩家执行“单色极化构筑”,否则后期伤害将严重刮痧。
|
||||
2. **高度互锁的词条 Synergy 系统**:
|
||||
* **机制描述**:武器和技能在生成时带有随机词条(Affixes)。这些词条之间具有非常明确的**“前置条件与增伤”**锁链。
|
||||
* **典型锁链**:主武器有词条“对处于燃烧状态的敌人伤害 +100%”,而副武器(或手雷)具有“击中敌人时点燃地面”。这就构成了一个最基础但极具成就感的局内搭配。
|
||||
|
||||
#### 1.4.2 代表性设计实例
|
||||
* **装备/Buff 设计实例:流血与毒素的连锁反应**
|
||||
* **主武器 - 【狂暴之刃】**:近战挥砍,如果目标处于流血状态,则攻击速度提升 30%。
|
||||
* **副技能 - 【撕裂光环】**:在身边生成切割力场,使接触到的敌人流血,若怪在力场中死亡,则向周围抛射毒液。
|
||||
* **洗炼系统(Refining)**:在关卡过渡区,玩家可以消耗金币重滚武器的词条,直到洗出“对流血目标伤害 +60%”和“攻击时释放毒雾”,使两件装备无缝闭环。
|
||||
|
||||
---
|
||||
|
||||
## 2. 四大动作 Roguelike 代表作多维度横向对比
|
||||
|
||||
为了让对比更加直观,下表从 **12 个专业游戏设计维度** 对上述四款作品以及我们的项目 **Cielonos** 进行横向对比:
|
||||
|
||||
| 对比维度 | 《绝区零》(零号空洞) | 《鸣潮》(深坠异想奇境) | 《Hades》(众神恩赐) | 《死亡细胞》(动作战术) | **《Cielonos》(本项目定位)** |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| **1. 地图与探索流** | **2D电视机网格探索**。路径规划性强,包含大量隐藏通道、解谜与资源博弈。 | **线性房间跳转**。主要分为:常规战斗、精英战斗、随机事件、商店及休息室。 | **带预示的线性多分支**。玩家能看到下个房间的奖励图标,做针对性抉择。 | **2D类银河战士恶魔城大地图**。半开放探索,寻找符文和隐藏限时门。 | **Slay the Spire 式网格分支图**。基于 `RunManager` 加载,包含战斗/商店/医疗/强化。 |
|
||||
| **2. 局内核心构筑** | 4+2 鸣徽流派组合 + 催化鸣徽质变 + 邦布辅助插件。 | 初始变身声骸 (Echo) + 6大元素隐喻数值堆叠 + 角色技能特异强化。 | 武器基础形态选择 + 众神双重恩赐 (Duo) + 锤子(Daedalus)招式变异。 | 红/绿/紫属性卷轴极化 + 装备随机互锁词条(如燃烧+100%伤害)协同。 | **激情系统 (Passion) 状态流** + 主武器切换 Combo + 装备(被动/辅助)插槽。 |
|
||||
| **3. 武器/风格切换** | **战斗中换人(Switch Assist)**。后台角色通过“招架/闪避”连携登场。 | 角色间切人释放协奏技能(QTE),触发元素反应与离场残留 Buff。 | 单局只能使用一把武器。通过大招(Call)和投掷(Cast)丰富战斗维度。 | 同时携带主副武器(或双技能)。通过快捷键高频无缝轮流使用。 | **双主武器无缝切枪 (Switch Combo)**。刷新后摇缓冲区,触发动作与弹幕突袭。 |
|
||||
| **4. 击打感与反馈** | 极强的强袭与支援招架(弹刀)。伴随刺耳金属声、屏幕高光与**hitstop(画面定格)**。 | 声骸大范围变身横扫;完美的振刀(Parry)判定与强烈的无敌闪避震动。 | 冲刺背击(Backstab)、怪撞墙的二次碰撞碎裂反馈、强烈的屏幕抖动。 | 高速顿挫的斩击,大威力武器带来的碎尸、硬直反馈与受击瞬时回血(虚血机制)。 | **激情等级驱动的手感演变**。低级冷静加防,高级超频高频瞬闪,伴随音效切换。 |
|
||||
| **5. 风险与收益管理** | **压力与侵蚀系统**。走格子移动累加压力,超限获得永久性恶性诅咒,构成隐形限时。 | 裂痕挑战。以持续性掉血或面对极高攻击力的怪为代价,赌博式获取金色隐喻。 | **惩罚契约 (Pact)**。自选怪物移速、易伤、陷阱伤害等以赚取泰坦之血。 | 诅咒箱(一击必死,击杀10怪解除,给极品武器)与限时门(速通奖励)。 | **认知扭曲 (Distortion)** 与 **激情超频易伤**。高激情带来20%易伤与高衰减。 |
|
||||
| **6. 局外成长 (Meta)** | 调查执照点数解锁永久天赋树;邦布升级;局外技能芯片强化。 | 永久天赋树(提升战斗属性与初始生命值);局外稀有声骸词条兑换。 | 冥府之镜(复活次数、伤害加成);武器形态投资升星;剧情好感度加成。 | 收集细胞解锁新武器图纸、升级铁匠铺(提高初始武器高品质概率)。 | **Fortress 基地 R&D 科技树**(蓝图解锁) + 地缘政治阵营议程好感度加成。 |
|
||||
| **7. UI与视觉融合** | CRT电视墙 UI + 赛博霓虹故障风。侵蚀触发时界面闪烁马赛克。 | 异想奇境专用的迷幻星空与棱镜渲染风格,声骸技能槽独立展示。 | 古典希腊神话浮雕风格 UI。获得恩赐时神祇半身像立绘动态展示。 | 像素风简约 HUD,装备栏以红绿紫三种标志性颜色进行视觉分区。 | 二次元科技风 HUD。**激情 UI 伴随等级改变字体颜色**;视界侵蚀带来噪点抖动。 |
|
||||
| **8. 动作指令深度** | 普攻连点、蓄力分支、闪避反击、切人招架。指令偏向时机判定。 | 复杂的普攻连击段、重击分支、跳跃攻击、空中连招、多角色协奏 QTE。 | 普攻、特攻(Special)、投掷、蓄力、冲刺攻击(Dash-Strike)。指令极度流畅。 | 普攻、副手武器、两个快捷技能、翻滚、攀爬墙壁、下砸攻击。 | **连招树配置 (`ComboData`)**。支持“L”、“R”多分支派生与切枪缓冲。 |
|
||||
| **9. 随机事件交互** | 走格子触发图纸剧情;选择支付齿轮硬币获得特定增益或清除侵蚀。 | 样本采集、裂隙挑战、异想谢幕人对话选择(以物易物或付出代价)。 | 众神试炼(二选一神明,激怒未选者触发战斗,战胜得双份奖励)。 | 剧情NPC碎碎念提供线索;献祭祭坛(牺牲当前装备换取金币/血瓶)。 | Yarn Spinner 对话驱动的 **Event 节点**,支持地缘政治阵营选择与资源交易。 |
|
||||
| **10. 角色差异化** | 击破型(打失衡)、强攻型(打伤害)、异常型(打属性积蓄)、支援型。 | 每个角色拥有完全不同的核心动能条(如忌炎的破阵值,安可的失控值)。 | 切换形态即换角色(如亚瑟剑是重剑慢攻,路西法炮是激光枪射线)。 | 纯靠装备决定职业(拿盾是绿流坦,拿弓是紫流射手,拿双刀是红流刺客)。 | 玩家单角色,但通过**主武器 (`MainWeapon`)** 及 `FuncAnimSubmodule` 彻底改变手感。 |
|
||||
| **11. 资源管理系统** | 局内货币(齿轮币)、压力值(100上限)、净化剂、硬币。 | 异想样本(代币)、同调等级、声骸冷却时间。 | 金币(Shop消费)、黑暗黑暗/石榴(提升属性)、死神神力(投掷弹药)。 | 金币、细胞(关卡间结算)、血瓶次数(极其珍贵的恢复资源)。 | **激情值 (Passion)**、能量值 (Energy)、生命与护盾、认知扭曲度。 |
|
||||
| **12. 战斗关卡空间** | 狭窄街区、封闭竞技场。强调版边卡位与障碍物利用。 | 巨型开阔虚空场景。拥有极高的垂直空间,允许频繁的空中连招。 | 充满陷阱(岩浆、地刺、落石)、障碍物密布的斜45度房间。强调撞墙位移。 | 2D横版多层平台。充满陷阱、刺堆、电网,强调地形杀与背刺空间。 | **3D 封锁式 CityArena 街区**。包含可破坏掩体与基于 Passion 爆发的力场。 |
|
||||
|
||||
---
|
||||
|
||||
## 3. Cielonos 的设计参考与落地实施建议
|
||||
|
||||
结合 Cielonos 目前已经搭建完毕的核心架构(Slay the Spire 类型的网格生成图 `MapGenerator`、基于主角 localTime 的激情系统 `PassionSystem`、已实现的 `Polychrome` 多彩和 `FutureWand` 法杖武器、以及四大阵营设定),我们提出以下四个**极具 Lore 契合度、高可玩性且具备明确技术实施路径**的系统设计建议:
|
||||
|
||||
### 3.1 探索端参考:《绝区零》压力系统 $\rightarrow$ 【认知扭曲与视界侵蚀 (Cognitive Distortion)】
|
||||
|
||||
> [!NOTE]
|
||||
> **Lore背景联结**:
|
||||
> 主角(高维投影少女)所处的战场是由 Technician(即“Mother”)通过注入高维认知过滤器写入而呈现的。在战区(CityArena)中,主角因为高维感知受损,无法直视普通人类,且需要过滤器来维持时空稳定。
|
||||
> 随着在地图网格中频繁传送和探索,认知过滤器会由于时空不连续性发生过载,产生**“认知扭曲度”**。当扭曲度达到临界点,视界就会发生坍塌,产生现实错乱(侵蚀效果)。
|
||||
|
||||
```
|
||||
[ 节点传送一次 (+15扭曲) ] ──> [ 触发战斗/机关 (+10扭曲) ] ──> [ 扭曲度满100 ]
|
||||
│
|
||||
v
|
||||
[ 战斗视觉侵蚀:画面噪点/代码雨 ] <── [ UI/判定侵蚀:血条闪烁/闪避帧缩短 ] <── [ 触发“认知碎裂”(Debuff) ]
|
||||
```
|
||||
|
||||
#### 3.1.1 机制数值设计
|
||||
* **扭曲值累加**:
|
||||
* 玩家每在地图上移动并传送一次节点,**认知扭曲值 +15**。
|
||||
* 触发某些负面随机事件时,**扭曲值 +20 ~ +30**。
|
||||
* 在“医疗站 (MedicalStation)”或使用特定的“稳定剂(消耗品)”可以**降低扭曲值(-30 ~ -50)**。
|
||||
* **侵蚀效果阶梯 (Perceptual Fractures)**:
|
||||
当扭曲值每达到 100 时,清零并随机获得 1 个“认知碎裂”Debuff,最高累积 5 个。
|
||||
1. **碎裂一阶段:【信号噪波 (Signal Noise)】**
|
||||
* *表现*:画面边缘出现低频的彩虹色散(Chromatic Aberration)与绿色故障噪点。
|
||||
* *惩罚*:无攻击数值惩罚,但小地图 UI 开始出现马赛克遮挡,无法看清当前节点相邻的第二层节点类型。
|
||||
2. **碎裂二阶段:【结构坍塌 (Structural Collapse)】**
|
||||
* *表现*:场景中的某些非战斗障碍物(如路灯、掩体)直接退化为“绿色三维线框(Wireframe Shader)”,失去贴图,并产生频率不等的闪烁。
|
||||
* *惩罚*:玩家的**完美闪避判定帧缩短 15%**(高维稳定度下降,冷静状态的加成减弱)。
|
||||
3. **碎裂三阶段:【读数虚妄 (False HUD Readings)】**
|
||||
* *表现*:HUD 界面发生横向撕裂(Screen Tear Effect)。玩家的生命值条、护盾条以及激情等级文本在真实数值的 $\pm20\%$ 范围内随机快速跳变,使玩家无法获得精确的血量反馈。
|
||||
* *惩罚*:玩家受到的最终伤害提升 10%。
|
||||
4. **碎裂四阶段:【时空阻滞 (Temporal Drag)】**
|
||||
* *表现*:主角动作的视觉残影滞留在原地,呈现紫色半透明状。
|
||||
* *惩罚*:主武器切换(Switch Combo)的缓冲输入窗口时间缩短 30%,非完美切枪的判定惩罚加重。
|
||||
5. **碎裂五阶段(极性):【高维溢载 (Dimensional Overflow)】**
|
||||
* *表现*:主角眼前的战场失去所有色彩,变为纯高对比度的黑白代码风世界。
|
||||
* *惩罚*:玩家每在地图上移动一步,直接扣除最大生命值的 5%(无法被护盾抵扣);战斗中所有敌人的抗打断能力提升 50%。
|
||||
|
||||
#### 3.1.2 技术实施路径 (Technical Specs)
|
||||
1. **数据与逻辑管理**:
|
||||
* 在 [RunManager.cs](file:///d:/Projects/Cielonos/Assets/Scripts/MainGame/GameRun/RunManager.cs) 中添加 `distortion` (int) 和 `activeCorruptions` (List) 变量。
|
||||
* 编写 `AddDistortion(int amount)` 函数。在地图节点传送方法(如 `SelectNode()`)的尾部调用该函数。
|
||||
* 当 `distortion >= 100` 时,触发 `TriggerCorruption()`,随机从一个 ScriptableObject 库中抽取一个 Corruption 实例,并触发 UI 提示。
|
||||
2. **视觉渲染干涉**:
|
||||
* 利用 Unity URP 的 **Render Features**,预先制作两个 Post-processing 材质(故障噪点材质、线框Shader渲染材质)。
|
||||
* 根据 `activeCorruptions` 的数量 and 类型,动态修改 Render Feature 的 `Volume` 权重(Weight),控制屏幕色散与撕裂效果。
|
||||
|
||||
---
|
||||
|
||||
### 3.2 战斗爆发端参考:《鸣潮》声骸幻形 $\rightarrow$ 【高维覆写与超限投影 (Dimension Overwrite)】
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **设计痛点**:
|
||||
> 目前战斗流程中,玩家攒满 SSS 级激情后释放 **Passion Burst(世界线裁定)** 仅有“时空断裂”和“无敌”等通用数值化体验,缺乏视觉上的绝对高潮与动作爽感。
|
||||
> **参考方案**:
|
||||
> 引入“高维投影覆写”机制。在 Passion Burst 的 6秒 期间,整个战场空间被高维代码“格式化”,主角的普通攻击模组被替换为震撼的“投影神降”攻击。
|
||||
|
||||
```
|
||||
[ 激情值达到 SSS (>=96%) ] ──> [ 按下 Burst 键 ] ──> [ 空间碎裂特效与音乐切换 ]
|
||||
│
|
||||
v
|
||||
[ 6秒维度覆写状态 ] ──> [ 普攻替换为巨型虚空武器 ] ──> [ 刀刀烈火/全屏聚怪/完全无敌 ]
|
||||
```
|
||||
|
||||
#### 3.2.1 机制细节表现
|
||||
* **覆写激活(The Ignition)**:
|
||||
* 当玩家在 SSS 级按下爆表键时,播放空间如镜面碎裂的特效,背景音乐(BGM)瞬间切换为激情高亢的交响电声(通过 Wwise State 切换)。
|
||||
* 玩家进入绝对无敌、无法被选中的“虚无”状态。
|
||||
* **武器覆写招式(Overwritten Motion Sets)**:
|
||||
* **主武器:Polychrome (多彩)** 覆写:
|
||||
* 挥砍动作中,主角的身后会投射出巨型机械少女(Mecha-Order)的线框半身像。
|
||||
* 普攻由常规剑舞变为巨型高维能量刃横扫(攻击范围扩大 300%),每一击在空间中留下永久撕裂的霓虹缝隙,缝隙在 0.5 秒后发生连锁二次爆炸。
|
||||
* **主武器:FutureWand (法杖)** 覆写:
|
||||
* 远程射击动作覆写。主角不再发射小光弹,而是召唤空中的星际轨道炮投射(Techno-Syndicate 写入)。
|
||||
* 每一发普攻都会在鼠标锁定位置引发一道贯穿天地的量子光斑轰击,对半径 8 米内的敌人造成毁灭性重击并附带聚怪引力。
|
||||
* **退场余波 (The Buff Decay)**:
|
||||
* 6 秒结束后,空间碎片重新拼合,BGM 渐隐恢复,激情值归 0。主角获得 3 秒的冷静保护罩(护盾回复速度翻倍),完成攻守转换。
|
||||
|
||||
#### 3.2.2 技术实施路径 (Technical Specs)
|
||||
1. **动画覆写机制**:
|
||||
* Cielonos 已拥有 `FuncAnimSubmodule.cs` 用于管理运行时动作片段替换(Animator Override Batch)。
|
||||
* 编写 `ApplyBurstOverride()`:在触发 Burst时,向 `FuncAnimSubmodule` 注入一套 Burst 专用的 Animation Clips(如 `Burst_LightAttack_01` 等)。
|
||||
* 编写 `RemoveBurstOverride()`:状态结束时,重置回武器的原生 Clip 列表。
|
||||
2. **巨型投影特效**:
|
||||
* 将巨型半身像/机械臂作为粒子特效与骨骼动画 prefab,绑定在玩家的攻击判定帧事件(Animation Events)上。当特定帧触发时,实例化该特效并同步其 Transform。
|
||||
|
||||
---
|
||||
|
||||
### 3.3 Build深度端参考:《Hades》双重恩赐与《死亡细胞》协同 $\rightarrow$ 【阵营印记与切枪引爆 (Switch Detonation)】
|
||||
|
||||
> [!TIP]
|
||||
> **设计痛点**:
|
||||
> 之前的方案提出了“切枪物理联动”,但如果采用硬编码(如 A 枪切 B 枪固定派生某招),扩展性极差,难以匹配 Roguelike 的随机掉落乐趣。
|
||||
> **参考方案**:
|
||||
> 将切枪联动抽象为**“阵营印记(Faction Imprints)的化学反应”**。主武器和辅助装备在局内获得时,会根据其所属阵营(Alliance, Syndicate, Parliament, Mecha-Order)为玩家的攻击赋予不同的“印记附着”能力。切换武器时,新登场武器的“登场技”会瞬间引爆所有印记,触发强力协同。
|
||||
|
||||
#### 3.3.1 四大阵营印记设定
|
||||
1. **Alliance (地表联合军) - 【动能冲击 (Kinetic Tag)】**:
|
||||
* *效果*:积攒目标的失衡值。当印记达到 3 层时,敌人进入“破定易伤”状态。
|
||||
2. **Techno-Syndicate (科技领) - 【算力标记 (Compute Stamp)】**:
|
||||
* *效果*:在目标身上植入电荷,每秒向周围发射微弱的连锁闪电。
|
||||
3. **Arcane Parliament (魔导国) - 【熵能衰变 (Entropy Burn)】**:
|
||||
* *效果*:目标身上燃烧魔法火焰,持续受到基于其当前护盾值百分比的无视护甲伤害。
|
||||
4. **Mecha-Order (机械秩序) - 【重力锚定 (Gravity Anchor)】**:
|
||||
* *效果*:目标在空间中被重力线缆拉扯,移动速度降低 30%。
|
||||
|
||||
#### 3.3.2 切换武器引爆机制(化学反应矩阵)
|
||||
当玩家装备 `Polychrome`(附着算力印记)攻击敌人,随后按下切枪键切换为 `FutureWand` 时,`FutureWand` 的登场突袭命中敌人,会根据敌人身上的**印记组合**,在 `CombatManager` 中触发以下爆破公式:
|
||||
|
||||
| 初始印记 A | 叠加印记 B | 化学反应名称 | 爆发效果表现 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **Compute** (Syndicate) | **Entropy** (Parliament) | **高维超导 (Superconductivity)** | 瞬间引落一道雷击轰炸,对目标造成大额元素伤害,雷击能量的 10% 转化为玩家的可用能量值(Energy)。 |
|
||||
| **Compute** (Syndicate) | **Gravity** (Mecha-Order) | **奇点锁死 (Singularity Lock)** | 在目标头顶生成一个持续 3 秒的微型黑洞,将半径 12 米内的普通敌人强制吸附到中心并造成持续硬直,为玩家创造完美的输出木桩。 |
|
||||
| **Entropy** (Parliament) | **Kinetic** (Alliance) | **热能过载 (Thermal Overload)** | 发生剧烈爆炸,造成物理与魔法混合伤害。若目标在爆炸中死亡,其剩余生命值的 50% 将以碎屑形式射向周围,引燃旁边的敌人。 |
|
||||
| **Gravity** (Mecha-Order) | **Kinetic** (Alliance) | **重能锤击 (Gravitational Crush)** | 瞬间打空目标 80% 的失衡值(Stance Bar)。若目标处于霸体状态,强制中断其当前出招动作并使其陷入 1.5 秒的强受击硬直。 |
|
||||
| **Compute** (Syndicate) | **Compute** (双同类) | **算法溢出 (Buffer Overflow)** | 印记层数翻倍,且在接下来的 5 秒内,玩家对该目标的攻击有 30% 概率不触发敌人的受击 hitstop,实现流畅连斩。 |
|
||||
|
||||
#### 3.3.3 技术实施路径 (Technical Specs)
|
||||
1. **印记状态机**:
|
||||
* 在 `CharacterBase.cs` 中添加一个 `Dictionary<FactionType, int> activeImprints`,用于记录怪物身上各个阵营印记的层数。
|
||||
* 编写 `ApplyImprint(FactionType faction, int amount)` 接口。
|
||||
2. **切枪钩子 (Switch Weapon Hook)**:
|
||||
* 在 [EquipmentSubmodule.cs](file:///d:/Projects/Cielonos/Assets/Scripts/MainGame/Characters/Player/Subcontrollers/EquipmentSubmodule.cs) 的 `SwitchWeapon()` 逻辑中,当检测到新武器装载并释放第一击(通过 `AttackArea.cs` 检测碰撞)时,获取被击中怪物的 `activeImprints`。
|
||||
* 检查是否满足反应组合。若满足,调用 `CombatManager.Instance.TriggerReaction(reactor, target, type)`,执行特效播放与属性扣除,然后清空印记字典。
|
||||
|
||||
---
|
||||
|
||||
### 3.4 难度调控与局外回馈:《Hades》热度契约 $\rightarrow$ 【高维调和协议 (Tuning Protocol)】
|
||||
|
||||
> [!NOTE]
|
||||
> **设计痛点**:
|
||||
> 玩家在局外浮空基地(Fortress)中如果只有单调的天赋加点,很容易产生割裂感。我们需要将“局外养成”与“局内难度验证”形成强烈的闭环。
|
||||
> **参考方案**:
|
||||
> 在 Fortress 的科研终端(R&D Station)旁,放置一个“高维调和仪”。玩家在开启新一局 Run 前,可以像《Hades》一样自选难度协议,用来赚取稀有的**“阵营蓝图(Faction Blueprints)”**。
|
||||
|
||||
#### 3.4.1 协议条目设计
|
||||
* **【协议·过滤噪点】**:局内所有节点的传送带来的“认知扭曲值”从 +15 提升至 +20。
|
||||
* **【协议·算力冗余】**:关卡内敌人的攻击力提升 15%,且精英怪有 30% 概率携带随机阵营护盾(只能用对应印记破盾)。
|
||||
* **【协议·激情流失】**:激情系统(Passion System)的衰减延迟从 3 秒缩短至 2 秒,且 SSS 级下的自然衰减率翻倍。
|
||||
* **【协议·资源冻结】**:医疗站(MedicalStation)的免费回复效果减半,且商店(LogisticsCenter)中高阶装备的价格上涨 20%。
|
||||
|
||||
#### 3.4.2 局外闭环回馈
|
||||
* 玩家勾选的协议越多,结算时获得的**“基地经费(Marks)”**和**“科研蓝图”**倍率越高。
|
||||
* 在 Fortress 中,玩家使用这些蓝图解锁:
|
||||
1. 新的被动装备(如 [Passion.cs](file:///d:/Projects/Cielonos/Assets/Scripts/MainGame/Items/PassiveEquipments/Passion.cs) 的上位替代品)。
|
||||
2. 新的辅助装备(如为 FutureWand 附加冰冻弹幕的芯片)。
|
||||
3. 解锁地缘政治决议(Geopolitical Agenda),从而决定局外哪个阵营对你的支持度最高。
|
||||
|
||||
---
|
||||
|
||||
## 4. 总结与后续建议
|
||||
|
||||
本设计研究报告通过全面解构行业标杆,为 Cielonos 提供了一套系统化的 Roguelike 动作游戏框架。
|
||||
|
||||
> [!TIP]
|
||||
> **后续行动建议**:
|
||||
> 1. **第一阶段:跑通印记机制**
|
||||
> 优先在 `BuffSubmodule.cs` 和 `EquipmentSubmodule.cs` 中实现最基础的“算力 + 熵能 = 雷击”的引爆机制。这是体现“切枪化学反应”性价比最高的第一步。
|
||||
> 2. **第二阶段:实现认知扭曲 UI 噪波**
|
||||
> 利用已有的 [PassionSystemUIArea.cs](file:///d:/Projects/Cielonos/Assets/Scripts/MainGame/Managers/CombatManager/CombatSystems/PassionSystem/UI/PassionSystemUIArea.cs) 的 UI 逻辑,在屏幕上叠加扭曲度指示器,并通过 Post-Processing 挂载基础的 Glitch 故障效果。
|
||||
> 3. **第三阶段:打磨 SSS 激情释放视觉**
|
||||
> 当 Polychrome 的连招动作稳定后,为其专门配制一套巨型刀光的 VFX,在 SSS Passion Burst 时触发,验证“高维覆写”的爽快感。
|
||||
@@ -1,557 +0,0 @@
|
||||
# Cielonos 项目3C任务清单
|
||||
|
||||
## 项目3C现状评估
|
||||
|
||||
### ✅ 已完成部分
|
||||
|
||||
#### Character(角色)
|
||||
|
||||
- ✅ 基础移动系统(行走、奔跑、冲刺)
|
||||
- ✅ 跳跃系统
|
||||
- ✅ 后撤步闪避
|
||||
- ✅ 攻击系统(轻攻击、重攻击)
|
||||
- ✅ 格挡系统(普通格挡、完美格挡)
|
||||
- ✅ 角色动画分层(FullBody、UpperBody)
|
||||
- ✅ 根运动(Root Motion)支持
|
||||
- ✅ 冲刺/后撤步闪避无敌帧
|
||||
|
||||
#### Camera(摄像机)
|
||||
|
||||
- ✅ Cinemachine虚拟相机系统
|
||||
- ✅ Free Look相机(自由视角)
|
||||
- ✅ Lock Target相机(锁定目标)
|
||||
- ✅ State-Driven相机切换
|
||||
- ✅ 摄像机旋转子模块
|
||||
- ✅ 遮挡渐隐子模块(Occlusion Fade)
|
||||
- ✅ 锁定目标系统
|
||||
- ✅ 摄像机震动系统(Rotation Shake、Position Shake、FOV Shake)
|
||||
- ✅ 战斗校准(Camera Recenter)
|
||||
|
||||
#### Control(操控)
|
||||
|
||||
- ✅ 键盘鼠标输入系统
|
||||
- ✅ 视角旋转输入
|
||||
- ✅ 移动输入
|
||||
- ✅ 输入预缓冲系统
|
||||
- ✅ 输入映射配置
|
||||
|
||||
***
|
||||
|
||||
## 一、Character(角色)待完善任务
|
||||
|
||||
### 1.1 移动系统优化
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [x] **完善冲刺系统细节**
|
||||
- [x] 冲刺时的角色朝向控制(朝向移动方向 vs 朝向相机方向)
|
||||
- [x] 冲刺速度曲线(启动快 → 维持 → 减速停止)
|
||||
- [x] 冲刺时是否允许视角旋转?
|
||||
- [x] 冲刺动画根运动配置
|
||||
- [x] **完善闪避系统细节**
|
||||
- [x] 闪避无敌帧的可视化表现(是否有特效?)
|
||||
- [x] 闪避时相机行为(锁定目标时闪避,相机如何处理?)
|
||||
- [x] 闪避距离与动画的匹配
|
||||
- [x] 空中闪避的特殊处理(空中冲刺?)
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [x] **完善跳跃细节**
|
||||
- [x] 跳跃高度配置是否合理?
|
||||
- [x] 跳跃时是否可以攻击/格挡?
|
||||
- [x] 二段跳是否需要?(建议暂不加)
|
||||
- [x] 跳跃落地动画和过渡
|
||||
- [ ] **完善转身动画**
|
||||
- [ ] 快速转身动画(180度转身)
|
||||
- [ ] 移动方向变化时的转身过渡
|
||||
|
||||
### 1.2 战斗系统优化
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善攻击动作**
|
||||
- [ ] 轻攻击连段(建议3-5下)
|
||||
- [ ] 重攻击动作(是否有蓄力?)
|
||||
- [ ] 攻击方向控制(4方向?8方向?自由方向?)
|
||||
- [ ] 攻击时的移动(是否可以边攻击边移动?)
|
||||
- [ ] **完善格挡系统**
|
||||
- [ ] 格挡成功时的视觉反馈(是否有特效?)
|
||||
- [ ] 格挡成功时的音效
|
||||
- [ ] 格挡消耗(能量?耐力?)
|
||||
- [ ] 格挡时的角色动画
|
||||
- [ ] 格挡打断(何时会被打断?)
|
||||
- [ ] **完善完美格挡/闪避**
|
||||
- [ ] 完美时机窗口配置(当前是多少毫秒?)
|
||||
- [ ] 完美格挡/闪避成功后的特殊反馈(是否有特写?慢动作?)
|
||||
- [ ] 完美格挡/闪避成功后的反击机会(是否自动触发?)
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善武器动画**
|
||||
- [ ] 武器切换动画
|
||||
- [ ] 武器收鞘动画
|
||||
- [ ] 武器特殊姿态(如蓄力姿态)
|
||||
- [ ] **完善受击反馈**
|
||||
- [ ] 受击动画(轻击、重击、击飞)
|
||||
- [ ] 受击时的角色控制(是否会被打断动作?)
|
||||
|
||||
### 1.3 需要确认的事项
|
||||
|
||||
#### ⚠️ 需要手动确认
|
||||
|
||||
- [ ] **攻击范围配置**:当前武器的攻击范围是多少?是否需要调整?
|
||||
- [ ] **移动速度平衡**:当前速度是否合适?冲刺速度是否太快?
|
||||
- [ ] **格挡消耗**:格挡应该消耗能量还是耐力?消耗量是多少?
|
||||
- [ ] **完美时机窗口**:完美格挡/闪避的时机窗口应该是多少毫秒?
|
||||
- [ ] **攻击打断规则**:什么情况可以打断攻击?攻击可以被什么打断?
|
||||
- [ ] **受击规则**:攻击中是否可以被攻击?被打断后多久可以行动?
|
||||
|
||||
***
|
||||
|
||||
## 二、Camera(摄像机)待完善任务
|
||||
|
||||
### 2.1 基础摄像机系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善Free Look相机**
|
||||
- [ ] 旋转速度配置(鼠标灵敏度)
|
||||
- [ ] 角度限制配置(当前pitch范围)
|
||||
- [ ] 平滑度配置(是否足够平滑?)
|
||||
- [ ] 死区配置(消除微小移动的抖动)
|
||||
- [ ] **完善Lock Target相机**
|
||||
- [ ] 锁定切换速度(切换目标时相机过渡是否平滑?)
|
||||
- [ ] 锁定丢失条件(距离过远?目标死亡?)
|
||||
- [ ] 锁定时的视角偏移(是否有偏移?偏移多少?)
|
||||
- [ ] 锁定时是否禁用自由旋转?
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善相机切换逻辑**
|
||||
- [ ] 何时使用Free Look?何时使用Lock Target?
|
||||
- [ ] 切换时的过渡动画
|
||||
- [ ] 锁定目标的选择逻辑(最近?面向?血量最少?)
|
||||
- [ ] **完善相机参数预设**
|
||||
- [ ] 近战战斗时的相机距离(建议近一些)
|
||||
- [ ] 远程战斗时的相机距离(建议远一些)
|
||||
- [ ] 探索时的相机距离(标准距离)
|
||||
- [ ] 不同武器是否需要不同的相机参数?
|
||||
|
||||
### 2.2 摄像机震动系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善攻击震动**
|
||||
- [ ] 轻攻击震动配置(轻微)
|
||||
- [ ] 重攻击震动配置(中等)
|
||||
- [ ] 特殊攻击震动配置(强烈)
|
||||
- [ ] **完善格挡震动**
|
||||
- [ ] 普通格挡震动
|
||||
- [ ] 完美格挡震动(是否有特殊震动?)
|
||||
- [ ] **完善受击震动**
|
||||
- [ ] 轻击震动
|
||||
- [ ] 重击震动
|
||||
- [ ] 击飞震动
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善环境震动**
|
||||
- [ ] 爆炸震动
|
||||
- [ ] 特殊技能震动
|
||||
- [ ] 场景互动震动(如踩到机关)
|
||||
- [ ] **完善震动预设库**
|
||||
- [ ] 创建常用震动预设(LightHit, MediumHit, HeavyHit等)
|
||||
- [ ] 为不同武器配置不同的震动参数
|
||||
- [ ] 为不同敌人配置不同的震动参数
|
||||
|
||||
### 2.3 FOV系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善速度感FOV**
|
||||
- [ ] 奔跑时FOV变化(+5° \~ +10°)
|
||||
- [ ] 冲刺时FOV变化(+10° \~ +15°)
|
||||
- [ ] FOV过渡速度(应该快速还是平滑?)
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善战斗FOV**
|
||||
- [ ] 攻击时是否需要FOV变化?
|
||||
- [ ] 完美格挡/闪避时是否需要FOV变化?
|
||||
|
||||
### 2.4 遮挡处理系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善Occlusion Fade**
|
||||
- [ ] 遮挡物透明度的目标值(当前0.5是否合适?)
|
||||
- [ ] 淡入淡出速度
|
||||
- [ ] 遮挡物Layer配置
|
||||
- [ ] 检测射线的数量和位置
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善相机躲避(Dodge)**
|
||||
- [ ] 是否需要相机躲避功能?
|
||||
- [ ] 躲避速度配置
|
||||
- [ ] 躲避范围配置
|
||||
- [ ] **完善推近(Push In)**
|
||||
- [ ] 是否需要推近功能?
|
||||
- [ ] 推近触发条件
|
||||
- [ ] 推近距离
|
||||
|
||||
### 2.5 战斗校准系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善Camera Recenter**
|
||||
- [ ] 攻击后自动校准到面向敌人
|
||||
- [ ] 校准触发时机(攻击结束后多久?)
|
||||
- [ ] 校准速度
|
||||
- [ ] 校准是否可以被输入打断
|
||||
|
||||
### 2.6 需要确认的事项
|
||||
|
||||
#### ⚠️ 需要手动确认
|
||||
|
||||
- [ ] **相机距离**:当前默认相机距离(8单位)是否合适?需要根据场景测试
|
||||
- [ ] **旋转灵敏度**:当前鼠标旋转灵敏度是否合适?
|
||||
- [ ] **震动强度**:当前震动强度是否适中?太弱没有打击感?太强会造成晕眩?
|
||||
- [ ] **FOV范围**:当前FOV范围(30°-40°)是否合适?
|
||||
- [ ] **遮挡物Layer**:哪些Layer的物体会遮挡视野?是否配置正确?
|
||||
- [ ] **Lock Target角度阈值**:锁定目标的最小角度是多少?
|
||||
|
||||
***
|
||||
|
||||
## 三、Control(操控)待完善任务
|
||||
|
||||
### 3.1 输入系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善输入映射**
|
||||
- [ ] 当前按键配置是否合理?
|
||||
- [ ] 是否有按键冲突?
|
||||
- [ ] 是否需要支持自定义按键?
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善手柄支持**(暂缓,后续再实现)
|
||||
- [ ] 预留手柄输入映射
|
||||
- [ ] 手柄旋转灵敏度配置
|
||||
|
||||
### 3.2 输入缓冲系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善攻击缓冲**
|
||||
- [ ] 缓冲时间配置(当前是多少?)
|
||||
- [ ] 缓冲优先级配置
|
||||
- [ ] **完善闪避缓冲**
|
||||
- [ ] 缓冲时间配置
|
||||
- [ ] 缓冲优先级配置
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完善跳跃缓冲**
|
||||
- [ ] 缓冲时间配置
|
||||
|
||||
### 3.3 预输入系统
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **完善预输入验证**
|
||||
- [ ] 预输入窗口配置
|
||||
- [ ] 是否需要方向匹配?
|
||||
|
||||
### 3.4 输入辅助系统
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **方向吸附**(可选)
|
||||
- [ ] 是否需要8方向吸附?
|
||||
- [ ] 吸附角度配置
|
||||
- [ ] **目标吸附**(可选)
|
||||
- [ ] 是否需要面向敌人时自动调整角度?
|
||||
- [ ] 吸附角度阈值
|
||||
|
||||
### 3.5 需要确认的事项
|
||||
|
||||
#### ⚠️ 需要手动确认
|
||||
|
||||
- [ ] **攻击缓冲时间**:当前攻击缓冲时间(0.15s)是否合适?
|
||||
- [ ] **闪避缓冲时间**:当前闪避缓冲时间(0.2s)是否合适?
|
||||
- [ ] **预输入窗口**:当前预输入窗口(0.1s)是否合适?
|
||||
- [ ] **按键配置**:当前按键配置是否顺手?是否需要调整?
|
||||
|
||||
***
|
||||
|
||||
## 四、3C协调任务
|
||||
|
||||
### 4.1 移动与相机协调
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **奔跑时相机行为**
|
||||
- [ ] 奔跑时是否需要FOV变化?
|
||||
- [ ] 奔跑时相机跟随速度是否合适?
|
||||
- [ ] **冲刺时相机行为**
|
||||
- [ ] 冲刺时是否有特殊相机效果?
|
||||
- [ ] 冲刺时相机是否跟随角色旋转?
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **跳跃时相机行为**
|
||||
- [ ] 跳跃时相机是否需要轻微下压?
|
||||
- [ ] 落地时是否有相机震动?
|
||||
|
||||
### 4.2 战斗与相机协调
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **攻击时相机行为**
|
||||
- [ ] 攻击时是否需要震动?
|
||||
- [ ] 攻击时相机是否跟随武器方向?
|
||||
- [ ] 重攻击时是否有特殊相机效果?
|
||||
- [ ] **格挡时相机行为**
|
||||
- [ ] 格挡时相机是否锁定在敌人身上?
|
||||
- [ ] 完美格挡时是否有特殊相机效果?
|
||||
- [ ] **受击时相机行为**
|
||||
- [ ] 受击时的震动效果
|
||||
- [ ] 重击时是否有屏幕效果(变红等)
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **完美格挡/闪避时相机**
|
||||
- [ ] 是否有慢动作效果?
|
||||
- [ ] 是否有特写镜头?
|
||||
- [ ] 震动效果是否特殊?
|
||||
|
||||
### 4.3 锁定系统协调
|
||||
|
||||
#### P0 - 必须完成
|
||||
|
||||
- [ ] **锁定时移动**
|
||||
- [ ] 锁定时移动方向是相对于相机还是敌人?
|
||||
- [ ] 锁定时闪避方向如何定义?
|
||||
- [ ] **锁定时转身**
|
||||
- [ ] 锁定时角色是否自动面向敌人?
|
||||
- [ ] 锁定时转身速度是否合适?
|
||||
|
||||
### 4.4 需要确认的事项
|
||||
|
||||
#### ⚠️ 需要手动确认
|
||||
|
||||
- [ ] **锁定时移动方向**:锁定时WASD是相对于相机还是相对于敌人?
|
||||
- [ ] **锁定时转身**:锁定时角色是否应该自动转向敌人?还是只转相机?
|
||||
- [ ] **战斗校准时机**:攻击后多久应该自动校准到面向敌人?
|
||||
- [ ] **完美时机触发**:完美格挡/闪避成功后,是否应该触发特殊的相机效果?
|
||||
|
||||
***
|
||||
|
||||
## 五、调试和工具
|
||||
|
||||
### 5.1 运行时调试
|
||||
|
||||
#### P1 - 重要
|
||||
|
||||
- [ ] **添加3C调试面板**
|
||||
- [ ] 显示当前相机状态
|
||||
- [ ] 显示当前输入状态
|
||||
- [ ] 显示角色运动参数
|
||||
- [ ] 可开关的实时显示
|
||||
- [ ] **添加性能统计**
|
||||
- [ ] 相机更新耗时
|
||||
- [ ] 输入处理耗时
|
||||
|
||||
### 5.2 编辑器工具
|
||||
|
||||
#### P2 - 优化改进
|
||||
|
||||
- [ ] **摄像机预设编辑器**
|
||||
- [ ] 可视化调整相机参数
|
||||
- [ ] 实时预览效果
|
||||
- [ ] 导出/导入预设
|
||||
- [ ] **震动预设编辑器**
|
||||
- [ ] 可视化配置震动参数
|
||||
- [ ] 实时测试震动效果
|
||||
- [ ] **输入配置编辑器**
|
||||
- [ ] 可视化配置按键映射
|
||||
- [ ] 测试按键冲突
|
||||
|
||||
***
|
||||
|
||||
## 六、任务优先级总结
|
||||
|
||||
### P0 - 必须完成(阻塞性问题)
|
||||
|
||||
```
|
||||
优先级 任务名称 关联系统
|
||||
─────────────────────────────────────────────────────────
|
||||
P0 完善攻击震动配置 Camera
|
||||
P0 完善格挡震动配置 Camera
|
||||
P0 完善受击震动配置 Camera
|
||||
P0 完善完美格挡/闪避相机效果 Camera + Character
|
||||
P0 完善相机旋转平滑度 Camera
|
||||
P0 确认锁定时移动方向 Control
|
||||
P0 完善Camera Recenter Camera
|
||||
P0 完善Occlusion Fade Camera
|
||||
P0 完善攻击缓冲 Control
|
||||
P0 完善闪避无敌帧配置 Character
|
||||
```
|
||||
|
||||
### P1 - 重要(核心功能)
|
||||
|
||||
```
|
||||
优先级 任务名称 关联系统
|
||||
─────────────────────────────────────────────────────────
|
||||
P1 完善FOV变化系统 Camera
|
||||
P1 完善奔跑/冲刺相机效果 Camera
|
||||
P1 完善跳跃相机行为 Camera
|
||||
P1 完善锁定目标切换 Camera
|
||||
P1 完善输入预缓冲 Control
|
||||
P1 完善攻击连段 Character
|
||||
P1 完善转身动画 Character
|
||||
P1 创建震动预设库 Camera
|
||||
P1 添加3C调试面板 Tools
|
||||
```
|
||||
|
||||
### P2 - 优化改进(提升体验)
|
||||
|
||||
```
|
||||
优先级 任务名称 关联系统
|
||||
─────────────────────────────────────────────────────────
|
||||
P2 完善环境震动 Camera
|
||||
P2 完善输入辅助 Control
|
||||
P2 完善相机预设系统 Camera
|
||||
P2 完善编辑器工具 Tools
|
||||
P2 完善手柄支持(预留) Control
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 七、测试检查清单
|
||||
|
||||
### 7.1 基础功能测试
|
||||
|
||||
```
|
||||
□ 行走流畅,无抖动
|
||||
□ 奔跑流畅,无抖动
|
||||
□ 冲刺方向正确
|
||||
□ 跳跃高度合适,落地无异常
|
||||
□ 闪避无敌帧正常
|
||||
□ 攻击可以正常触发
|
||||
□ 格挡可以正常触发
|
||||
□ 完美格挡可以正常触发
|
||||
```
|
||||
|
||||
### 7.2 摄像机测试
|
||||
|
||||
```
|
||||
□ 自由视角旋转流畅
|
||||
□ 视角旋转无抖动
|
||||
□ 锁定目标正常
|
||||
□ 锁定切换正常
|
||||
□ 遮挡时透明化正常
|
||||
□ 攻击震动效果合适
|
||||
□ 格挡震动效果合适
|
||||
□ 受击震动效果合适
|
||||
□ FOV变化平滑
|
||||
```
|
||||
|
||||
### 7.3 输入测试
|
||||
|
||||
```
|
||||
□ 键盘鼠标输入正常
|
||||
□ 输入缓冲正常工作
|
||||
□ 预输入正常工作
|
||||
□ 无按键冲突
|
||||
□ 输入响应及时
|
||||
```
|
||||
|
||||
### 7.4 协调测试
|
||||
|
||||
```
|
||||
□ 战斗中相机表现正常
|
||||
□ 移动时相机跟随正常
|
||||
□ 锁定时移动方向正确
|
||||
□ 完美格挡时相机效果正常
|
||||
□ 闪避时相机效果正常
|
||||
□ 跳跃时相机表现正常
|
||||
```
|
||||
|
||||
***
|
||||
|
||||
## 八、待确认事项汇总
|
||||
|
||||
### ⚠️ 需要手动确认并勾选
|
||||
|
||||
#### 角色相关
|
||||
|
||||
- [ ] **攻击范围**:当前武器攻击范围是否合适?
|
||||
- [ ] **移动速度**:当前速度是否需要调整?
|
||||
- [ ] **格挡消耗**:格挡消耗什么资源?消耗量?
|
||||
- [ ] **完美时机窗口**:完美格挡/闪避窗口(毫秒)?
|
||||
- [ ] **攻击打断规则**:什么可以打断攻击?
|
||||
|
||||
#### 摄像机相关
|
||||
|
||||
- [ ] **相机距离**:当前8单位是否合适?
|
||||
- [ ] **旋转灵敏度**:鼠标灵敏度是否合适?
|
||||
- [ ] **震动强度**:当前震动强度是否适中?
|
||||
- [ ] **FOV范围**:当前FOV范围是否合适?
|
||||
- [ ] **遮挡Layer**:遮挡Layer是否配置正确?
|
||||
- [ ] **Lock Target角度**:锁定目标最小角度?
|
||||
|
||||
#### 操控相关
|
||||
|
||||
- [ ] **攻击缓冲时间**:当前0.15s是否合适?
|
||||
- [ ] **闪避缓冲时间**:当前0.2s是否合适?
|
||||
- [ ] **预输入窗口**:当前0.1s是否合适?
|
||||
- [ ] **按键配置**:当前按键是否顺手?
|
||||
|
||||
#### 协调相关
|
||||
|
||||
- [ ] **锁定移动方向**:锁定时WASD相对于相机还是敌人?
|
||||
- [ ] **锁定转身**:锁定时角色是否自动面向敌人?
|
||||
- [ ] **战斗校准时机**:攻击后多久校准?
|
||||
- [ ] **完美时机触发**:完美格挡/闪避是否触发特殊相机效果?
|
||||
|
||||
***
|
||||
|
||||
## 九、建议开发顺序
|
||||
|
||||
### 第一阶段:基础完善(1-2天)
|
||||
|
||||
1. **完善攻击震动配置** - 立即可提升打击感
|
||||
2. **完善格挡震动配置** - 完善防御反馈
|
||||
3. **完善相机旋转平滑度** - 基础体验
|
||||
4. **完善Occlusion Fade** - 防止穿墙
|
||||
5. **确认并配置按键** - 确保输入正常
|
||||
|
||||
### 第二阶段:核心体验(2-3天)
|
||||
|
||||
1. **完善完美格挡/闪避相机效果** - 核心卖点
|
||||
2. **完善FOV变化系统** - 速度感
|
||||
3. **完善Camera Recenter** - 战斗节奏
|
||||
4. **完善攻击缓冲** - 手感提升
|
||||
5. **完善锁定系统** - 核心功能
|
||||
|
||||
### 第三阶段:细节打磨(2-3天)
|
||||
|
||||
1. **完善奔跑/冲刺相机效果** - 细节体验
|
||||
2. **创建震动预设库** - 系统化
|
||||
3. **完善输入预缓冲** - 手感提升
|
||||
4. **完善跳跃相机行为** - 细节完善
|
||||
5. **添加调试面板** - 便于调试
|
||||
|
||||
### 第四阶段:工具和优化(1-2天)
|
||||
|
||||
1. **完善编辑器工具** - 提升效率
|
||||
2. **性能优化** - 确保流畅
|
||||
3. **全面测试** - 确保质量
|
||||
|
||||
***
|
||||
|
||||
*文档生成日期: 2026-04-17*\
|
||||
*生成者: Game Designer Agent*
|
||||
@@ -1,674 +0,0 @@
|
||||
# Cielonos 项目总结文档
|
||||
|
||||
## 项目概述
|
||||
|
||||
**项目名称**: Cielonos
|
||||
**项目类型**: 二次元风格、3D、第三人称、Roguelike动作游戏
|
||||
**Unity版本**: Unity 6+ (使用URP渲染管线)
|
||||
**目标平台**: PC/Console (主平台), Mobile (次平台)
|
||||
**开发语言**: C#
|
||||
|
||||
---
|
||||
|
||||
## 核心架构
|
||||
|
||||
### 1. 系统架构模式
|
||||
项目采用**Submodule/Subcontroller架构模式**,将复杂系统拆分为可组合的子模块:
|
||||
|
||||
```
|
||||
CharacterBase
|
||||
├── Submodules (数据/逻辑层)
|
||||
│ ├── SelfTimeSubmodule (时间控制)
|
||||
│ ├── AttributeSubmodule (属性管理)
|
||||
│ ├── EventSubmodule (事件系统)
|
||||
│ ├── BuffSubmodule (Buff系统)
|
||||
│ └── StatusSubmodule (状态系统)
|
||||
└── Subcontrollers (表现/交互层)
|
||||
├── MovementSubcontroller (移动控制)
|
||||
├── AnimationSubcontroller (动画控制)
|
||||
├── RenderSubcontroller (渲染控制)
|
||||
├── CollisionSubcontroller (碰撞控制)
|
||||
└── 其他...
|
||||
```
|
||||
|
||||
### 2. 命名空间组织
|
||||
```
|
||||
Cielonos.MainGame/
|
||||
├── Characters/ # 角色系统
|
||||
│ ├── Player/ # 玩家控制
|
||||
│ ├── Automata/ # AI敌人
|
||||
│ └── Base/ # 角色基础类
|
||||
├── Buffs/ # Buff系统
|
||||
├── Map/ # 地图系统
|
||||
├── Managers/ # 游戏管理器
|
||||
└── UI/ # UI系统
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 核心系统详解
|
||||
|
||||
### 1. 角色系统 (CharacterBase)
|
||||
|
||||
#### 1.1 角色阵营 (Fraction)
|
||||
```csharp
|
||||
public enum Fraction
|
||||
{
|
||||
Player = 0, // 玩家
|
||||
AlliedMinion = 1, // 友军
|
||||
Enemy = 10, // 敌人
|
||||
Neutral = 20 // 中立
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.2 角色子系统 (Submodules)
|
||||
- **AttributeSubmodule**: 属性系统,支持动态属性修改和加成计算
|
||||
- **BuffSubmodule**: Buff/DeBuff管理系统
|
||||
- **StatusSubmodule**: 状态系统(眩晕、束缚、无敌等)
|
||||
- **EventSubmodule**: 事件系统(受伤、攻击、死亡等)
|
||||
|
||||
#### 1.3 角色控制器 (Subcontrollers)
|
||||
- **MovementSubcontroller**: 移动控制(支持地面/空中/游泳等)
|
||||
- **AnimationSubcontroller**: 动画控制(Animator管理)
|
||||
- **RenderSubcontroller**: 渲染控制(材质、特效)
|
||||
- **CollisionSubcontroller**: 碰撞控制
|
||||
- **BodyPartsSubcontroller**: 身体部位管理
|
||||
- **AudioSubcontroller**: 音频控制
|
||||
- **ReactionSubcontroller**: 反应系统(格挡、闪避)
|
||||
- **FeedbackSubcontroller**: 反馈系统
|
||||
|
||||
### 2. 属性系统 (AttributeSystem)
|
||||
|
||||
#### 2.1 属性组 (AttributeGroup)
|
||||
```csharp
|
||||
public partial class AttributeGroup
|
||||
{
|
||||
public Dictionary<string, float> original; // 原始属性
|
||||
public Dictionary<string, float> current; // 当前属性(受Buff影响)
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 属性修饰系统
|
||||
支持多种修饰方式:
|
||||
- **Flat值**: 直接加减数值
|
||||
- **百分比加成**: 累加型百分比
|
||||
- **百分比倍率**: 乘算型百分比
|
||||
|
||||
#### 2.3 伤害计算
|
||||
```csharp
|
||||
public float GetDamageValue(AttackValue attackValue)
|
||||
{
|
||||
// 基础伤害 × 攻击者属性加成 × 受伤者属性加成
|
||||
// × 最终伤害倍率
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 战斗系统 (BattleSystem)
|
||||
|
||||
#### 3.1 攻击类型 (AttackType)
|
||||
```csharp
|
||||
public enum AttackType
|
||||
{
|
||||
Energy = 1, // 能量伤害
|
||||
Kinetics = 2, // 动能伤害
|
||||
Explosion = 3, // 爆炸伤害
|
||||
Magic = 4, // 魔法伤害
|
||||
Pure = 5, // 纯粹伤害
|
||||
Blank = 6 // 无类型伤害
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2 突破等级 (BreakthroughType)
|
||||
```csharp
|
||||
public enum BreakthroughType
|
||||
{
|
||||
None = 0, // 无突破
|
||||
Weak = 10, // 弱突破
|
||||
Medium = 20, // 中突破
|
||||
Heavy = 30, // 强突破
|
||||
Disruption = 40, // 打断突破
|
||||
Forced = 50, // 强制突破
|
||||
Unstoppable = 100 // 不可阻挡
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.3 攻击区域系统 (AttackArea)
|
||||
**攻击区域是战斗系统核心组件**,支持:
|
||||
- **攻击判定**: 基于碰撞体的命中检测
|
||||
- **力效果**: 击退、击飞、吸引等
|
||||
- **命中反馈**: 打击特效、音效、伤害数字
|
||||
- **移动轨迹**: 直线、追踪、弧线等
|
||||
|
||||
**攻击区域子模块**:
|
||||
- TransformSubmodule: 位置/旋转/缩放控制
|
||||
- AttackSubmodule: 攻击逻辑
|
||||
- TimeSubmodule: 时间控制
|
||||
- HitSubmodule: 命中判定
|
||||
- MoveSubmoduleBase: 移动轨迹
|
||||
- RaycastSubmodule: 射线检测
|
||||
- ForceSubmodule: 力学效果
|
||||
- ReactionSubmodule: 反应触发
|
||||
|
||||
### 4. Buff系统 (BuffSystem)
|
||||
|
||||
#### 4.1 Buff分类
|
||||
```csharp
|
||||
public enum BuffType
|
||||
{
|
||||
Positive, // 正面Buff
|
||||
Negative, // 负面Debuff
|
||||
Neutral // 中性Buff
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.2 驱散等级 (BuffDispelLevel)
|
||||
```csharp
|
||||
public enum BuffDispelLevel
|
||||
{
|
||||
Basic = 0, // 弱驱散
|
||||
Strong = 10, // 强驱散
|
||||
DeathOnly = 20, // 仅死亡驱散
|
||||
Undispellable = 100 // 不可驱散
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.3 内置Buff类型
|
||||
- **Freeze**: 冰冻(停止移动和攻击)
|
||||
- **Burn**: 灼烧(持续伤害)
|
||||
- **Decay**: 衰败(属性下降)
|
||||
- **ElectronicDisturbance**: 电子干扰
|
||||
- **ElectronicParalysis**: 电子麻痹
|
||||
- **Weak**: 虚弱(攻击力下降)
|
||||
- **GeneralIncapacitation**: 失能
|
||||
|
||||
### 5. 状态系统 (StatusSystem)
|
||||
|
||||
#### 5.1 负面状态
|
||||
```csharp
|
||||
StatusType.Incapacitation = 0, // 失能(完全丧失行动)
|
||||
StatusType.Inhibition = 1, // 抑制(禁用技能)
|
||||
StatusType.Disarm = 2, // 缴械(禁用攻击)
|
||||
StatusType.Restraint = 3, // 束缚(禁用移动)
|
||||
StatusType.Disability = 4, // 残废(禁用反应)
|
||||
StatusType.Stun = 100, // 眩晕
|
||||
```
|
||||
|
||||
#### 5.2 正面状态
|
||||
```csharp
|
||||
StatusType.Invincible = 1000, // 无敌
|
||||
StatusType.Invisible = 1001, // 隐身
|
||||
```
|
||||
|
||||
### 6. 物品系统 (ItemSystem)
|
||||
|
||||
#### 6.1 物品基类 (ItemBase)
|
||||
**核心属性**:
|
||||
- FuncAnimDataCollection: 功能动画数据
|
||||
- AttackData: 攻击数据
|
||||
- ComboData: 连击数据
|
||||
- FunctionData: 技能数据
|
||||
- AmmoData: 弹药数据
|
||||
- BlockData: 格挡数据
|
||||
- OverloadData: 超载数据
|
||||
|
||||
**物品子模块**:
|
||||
- AttributeSubmodule: 被动属性
|
||||
- ComboSubmodule: 连击系统
|
||||
- FunctionSubmodule: 功能系统
|
||||
- AmmoSubmodule: 弹药管理
|
||||
- OverloadSubmodule: 超载管理
|
||||
|
||||
#### 6.2 主武器系统 (MainWeaponBase)
|
||||
当前已实现武器:
|
||||
- **Polychrome**: 多彩武器(可变形态)
|
||||
- **FutureWand**: 未来法杖
|
||||
|
||||
#### 6.3 武器数据
|
||||
```csharp
|
||||
public class AttackUnit
|
||||
{
|
||||
public string name;
|
||||
public AnimationClip animationClip;
|
||||
public AttackData attackData;
|
||||
public ComboData comboData;
|
||||
public Dictionary<string, FuncAnimData> funcAnims;
|
||||
}
|
||||
```
|
||||
|
||||
### 7. AI系统 (Automata)
|
||||
|
||||
#### 7.1 AI架构
|
||||
基于**Opsive Behavior Designer**实现行为树:
|
||||
- **行为树 (BehaviorTree)**: AI决策逻辑
|
||||
- **AI子树 (AI Subtrees)**: 可复用的行为模块
|
||||
- **自定义Task**: 自定义行为节点
|
||||
|
||||
#### 7.2 AI动作系统
|
||||
```csharp
|
||||
// 移动动作
|
||||
AdvanceRetreat: 前进/后退
|
||||
PrecisePursue: 精确追踪
|
||||
Standoff: 保持距离
|
||||
Strafe: 侧向移动
|
||||
|
||||
// 攻击动作
|
||||
ApplyBuff: 施加Buff
|
||||
PlayFuncAnim: 播放功能动画
|
||||
|
||||
// 条件判断
|
||||
CheckAttribute: 检查属性
|
||||
CheckBuff: 检查Buff状态
|
||||
CheckStatus: 检查角色状态
|
||||
IsEnoughEnergy: 检查能量
|
||||
```
|
||||
|
||||
#### 7.3 内置敌人类型
|
||||
- **HumanoidAndroid**: 人形机器人
|
||||
- **LegionCenturion**: 军团百夫长(精英敌人)
|
||||
- **NexusCrab**: 蟹型机器人
|
||||
|
||||
### 8. 动画系统 (AnimationSystem)
|
||||
|
||||
#### 8.1 功能动画 (Functional Animation)
|
||||
**核心概念**: 动画不仅是表现,还承载游戏逻辑
|
||||
```csharp
|
||||
public class FuncAnimData
|
||||
{
|
||||
public AnimInfo animInfo; // 动画基础信息
|
||||
public List<FuncAnimInterval> intervals; // 时间区间定义
|
||||
public Dictionary<string, List<FuncAnimEvent>> events; // 事件触发点
|
||||
}
|
||||
```
|
||||
|
||||
#### 8.2 动画打断系统
|
||||
```csharp
|
||||
public enum DisruptionType
|
||||
{
|
||||
None, // 完全不可打断
|
||||
NormalExternal, // 普通外部打断
|
||||
NormalAction, // 普通动作打断
|
||||
StrongAction, // 强动作打断
|
||||
SpecialAction, // 特殊动作打断
|
||||
Uninterruptible // 完全不可打断
|
||||
}
|
||||
```
|
||||
|
||||
#### 8.3 动画分层
|
||||
- **FullBody**: 全身动画层
|
||||
- **UpperBody**: 上半身动画层(可与移动叠加)
|
||||
|
||||
### 9. 功能动画Payload系统
|
||||
|
||||
功能动画Payload是触发游戏逻辑的核心机制:
|
||||
|
||||
```csharp
|
||||
// 可用Payload类型
|
||||
SpawnVFX: 生成特效
|
||||
PlaySoundFX: 播放音效
|
||||
SetStatus: 设置状态
|
||||
SetGravity: 设置重力
|
||||
SetBreakthroughResistance: 设置抗打断
|
||||
ChangeCollisionLayers: 改变碰撞层
|
||||
InvokeAnimScFunction: 调用动画控制器函数
|
||||
SwitchFuncAnim: 切换功能动画
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## UI系统
|
||||
|
||||
### 1. 玩家Canvas (PlayerCanvas)
|
||||
包含以下UI区域:
|
||||
- **PlayerInfoUIArea**: 玩家信息区
|
||||
- HealthBar: 生命值条
|
||||
- EnergyBar: 能量条
|
||||
- **MainWeaponUIArea**: 主武器UI
|
||||
- FunctionIcon: 技能图标
|
||||
- MainWeaponSwitchLine: 武器切换指示
|
||||
- **BossInfoUnit**: Boss信息单元
|
||||
- **EnemyInfoUnit**: 敌人信息单元
|
||||
|
||||
### 2. HUD系统
|
||||
- **DamageNumber**: 伤害数字(DamageNumbersPro)
|
||||
- 支持不同攻击类型(Energy/Kinetics/Explosion/Magic)
|
||||
- 支持暴击/普通显示
|
||||
- 支持护盾格挡显示
|
||||
|
||||
---
|
||||
|
||||
## 地图系统 (MapSystem)
|
||||
|
||||
### 1. Zone管理
|
||||
```csharp
|
||||
public class ZoneData
|
||||
{
|
||||
public List<SpawnPointKey> playerSpawns; // 玩家出生点
|
||||
public Dictionary<SpawnPointKey, string> enemySpawns; // 敌人配置
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 地图管理器 (MapManager)
|
||||
- **Zone切换**: 异步加载/卸载场景
|
||||
- **ScreenFader**: 场景过渡淡入淡出
|
||||
- **SpawnPoint**: 出生点管理
|
||||
|
||||
### 3. 现有场景
|
||||
- **Loading.unity**: 加载场景
|
||||
- **Menu.unity**: 菜单场景
|
||||
- **MainGame.unity**: 主游戏场景
|
||||
- **Default/DefaultStreet.unity**: 默认地图
|
||||
- ZoneData0, ZoneData1, ZoneData2: 区域数据
|
||||
|
||||
---
|
||||
|
||||
## 渲染系统
|
||||
|
||||
### 1. 渲染管线
|
||||
- **URP (Universal Render Pipeline)**: 通用渲染管线
|
||||
- **支持平台**: PC (高画质)、Mobile (优化画质)
|
||||
|
||||
### 2. 卡通渲染
|
||||
使用**POTA-Toon**实现二次元风格渲染:
|
||||
- 多光源支持
|
||||
- 复杂透明网格渲染(OIT技术)
|
||||
- 角色局部后处理
|
||||
|
||||
### 3. 后处理效果
|
||||
自定义后处理着色器:
|
||||
- **AnimeACES**: ACES色调映射
|
||||
- **AnimeBloom**: 卡通Bloom
|
||||
- **AdvancedVignette**: 高级暗角
|
||||
- **AdvancedChromaticAberration**: 色差
|
||||
- **SpeedLines**: 速度线效果
|
||||
- **Sharpen**: 锐化
|
||||
- **RGBSplitGlitch**: RGB分离故障效果
|
||||
- **RadialBlur**: 径向模糊
|
||||
- **StrobeFlash**: 闪光效果
|
||||
|
||||
### 4. 自定义着色器
|
||||
- **DitherLit**: Dither透明着色器
|
||||
- **MeshShader**: 网格特效着色器
|
||||
- Burn: 燃烧效果
|
||||
- Freeze: 冰冻效果
|
||||
- Outline: 描边效果
|
||||
- Weak: 虚弱效果
|
||||
|
||||
---
|
||||
|
||||
## 特效系统 (VFX)
|
||||
|
||||
### 1. VFX资源
|
||||
- **HUDTexts**: 伤害数字预设
|
||||
- **MeshFXs**: 网格特效
|
||||
- Freeze.prefab: 冰冻特效
|
||||
- Shocking.prefab: 电击特效
|
||||
- **Models**: 模型资源(Slash3.fbx)
|
||||
- **Textures**: 特效纹理
|
||||
- Glow/: 发光纹理
|
||||
- Line/: 线条纹理
|
||||
- Mask/: 遮罩纹理
|
||||
- Noise/: 噪声纹理
|
||||
- Particles/: 粒子纹理
|
||||
- Ring/: 环形纹理
|
||||
- Smoke/: 烟雾纹理
|
||||
- Trail/: 轨迹纹理
|
||||
- Turbulence/: 湍流纹理
|
||||
|
||||
### 2. 特效数据 (VFXData)
|
||||
```csharp
|
||||
public class VFXData
|
||||
{
|
||||
public Dictionary<string, VFXInfo> vfxCollection;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 武器特效
|
||||
敌人攻击特效预设:
|
||||
- **Hit.prefab**: 命中特效
|
||||
- **NormalBlock.prefab**: 普通格挡特效
|
||||
- **PerfectBlock.prefab**: 完美格挡特效
|
||||
- **NormalSlash.prefab**: 普通斩击
|
||||
- **NormalMovingSlash.prefab**: 移动斩击
|
||||
- **PowerfulSlash.prefab**: 强力斩击
|
||||
|
||||
---
|
||||
|
||||
## 音频系统
|
||||
|
||||
### 1. 音频中间件
|
||||
- **Wwise**: 专业游戏音频引擎
|
||||
- **背景音乐管理**: BackgroundMusicManager
|
||||
- **音效管理**: AudioManager
|
||||
|
||||
### 2. 音频容器 (AudioContainer)
|
||||
```csharp
|
||||
public class AudioContainer
|
||||
{
|
||||
public Dictionary<string, AK.Wwise.Event> soundEventDictionary;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 音频资源
|
||||
- **WwiseGenerated**: Wwise生成的音频代码
|
||||
- **AudioPoint.prefab**: 场景音频点
|
||||
|
||||
---
|
||||
|
||||
## 工具和插件
|
||||
|
||||
### 1. Unity官方/社区插件
|
||||
| 插件名称 | 用途 |
|
||||
|---------|------|
|
||||
| **Sirenix Odin Inspector** | 高级编辑器扩展 |
|
||||
| **DOTween/Pro** | 动画和过渡 |
|
||||
| **UniRx** | 响应式编程 |
|
||||
| **Easy Save 3** | 数据持久化 |
|
||||
| **I2 Localization** | 国际化支持 |
|
||||
| **RootMotion FinalIK** | 逆向运动学 |
|
||||
| **MagicaCloth2** | 布料模拟 |
|
||||
| **KINEMATION** | 骨骼动画 |
|
||||
| **DamageNumbersPro** | 伤害数字系统 |
|
||||
| **Modern UI Pack** | UI组件库 |
|
||||
| **MMFeedbacks (Feel)** | 反馈系统 |
|
||||
| **IngameDebugConsole** | 调试控制台 |
|
||||
| **Lean Pool/Common** | 对象池 |
|
||||
| **Opsive Behavior Designer** | AI行为树 |
|
||||
| **Hovl Studio VFX** | 特效资源包 |
|
||||
| **Arcanor VFX** | 特效资源包 |
|
||||
|
||||
### 2. 自定义工具
|
||||
- **Wingman**: 镜头系统
|
||||
- **AutoLOD**: LOD自动生成
|
||||
- **AtlasSplit**: 图集分割工具
|
||||
|
||||
---
|
||||
|
||||
## 输入系统
|
||||
|
||||
### 1. Input System
|
||||
使用Unity新InputSystem:
|
||||
```csharp
|
||||
// Input/PlayerInputActions.cs
|
||||
```
|
||||
|
||||
### 2. 玩家输入控制器
|
||||
```csharp
|
||||
public class PlayerInputSubcontroller
|
||||
{
|
||||
// 处理键盘/手柄输入
|
||||
// 输入缓冲系统
|
||||
// 输入优先级
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 预输入系统 (Preinput)
|
||||
支持**预输入缓冲**,提高响应手感
|
||||
|
||||
---
|
||||
|
||||
## 资源配置
|
||||
|
||||
### 1. 基础集合 (BaseCollections)
|
||||
```csharp
|
||||
MainGameBaseCollection: 主游戏资源配置
|
||||
MapBaseCollection: 地图配置
|
||||
EditorBaseCollection: 编辑器配置
|
||||
```
|
||||
|
||||
### 2. 物品资源
|
||||
- **MainWeapons**: 主武器预设
|
||||
- FutureWand.prefab
|
||||
- Polychrome.prefab
|
||||
|
||||
---
|
||||
|
||||
## 场景管理
|
||||
|
||||
### 1. 加载流程
|
||||
```
|
||||
Menu → Loading → MainGame
|
||||
↓
|
||||
异步加载场景
|
||||
↓
|
||||
最小加载时间保证
|
||||
↓
|
||||
场景激活
|
||||
```
|
||||
|
||||
### 2. 过渡效果
|
||||
- **ScreenFader**: 屏幕淡入淡出
|
||||
- **DOTween**: 过渡动画
|
||||
|
||||
---
|
||||
|
||||
## 核心设计模式
|
||||
|
||||
### 1. 单例模式
|
||||
```csharp
|
||||
public class Singleton<T> where T : MonoBehaviour
|
||||
{
|
||||
public static T Instance { get; private set; }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 子系统模式
|
||||
```
|
||||
Owner (持有者)
|
||||
├── Submodule (子模块 - 逻辑/数据)
|
||||
└── Subcontroller (子控制器 - 表现/交互)
|
||||
```
|
||||
|
||||
### 3. 事件驱动
|
||||
```csharp
|
||||
public class EventSubmodule
|
||||
{
|
||||
// 使用UniRx实现响应式事件
|
||||
public Subject<AttackResult> onDealAttack;
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 对象池
|
||||
使用LeanPool进行对象池管理
|
||||
|
||||
---
|
||||
|
||||
## 开发状态
|
||||
|
||||
### ✅ 已完成系统
|
||||
1. 基础角色系统
|
||||
2. 属性和Buff系统
|
||||
3. 战斗/攻击系统
|
||||
4. 动画系统
|
||||
5. AI行为树框架
|
||||
6. 物品系统框架
|
||||
7. UI系统框架
|
||||
8. 场景管理
|
||||
9. 地图系统框架
|
||||
10. 基础敌人AI
|
||||
11. 输入系统
|
||||
12. 伤害数字系统
|
||||
|
||||
### 🚧 待完善系统
|
||||
1. 完整武器系统(更多武器类型)
|
||||
2. 敌人AI行为树(完善所有敌人行为)
|
||||
3. 关卡生成系统(Roguelike核心)
|
||||
4. 技能树系统
|
||||
5. 成就系统
|
||||
6. 存档系统
|
||||
7. 多人系统(如果需要)
|
||||
8. 教程系统
|
||||
9. 配置文件系统
|
||||
|
||||
---
|
||||
|
||||
## 项目目录结构
|
||||
|
||||
```
|
||||
d:\Projects\Cielonos\
|
||||
├── Assets/
|
||||
│ ├── Scripts/ # 所有游戏脚本
|
||||
│ │ ├── Core/ # 核心系统
|
||||
│ │ ├── MainGame/ # 主游戏逻辑
|
||||
│ │ ├── Menu/ # 菜单系统
|
||||
│ │ └── SLSUtilities/ # 工具库
|
||||
│ ├── Prefabs/ # 预制体
|
||||
│ │ ├── Core/ # 核心预制体
|
||||
│ │ └── MainGame/ # 游戏预制体
|
||||
│ ├── Scenes/ # 场景
|
||||
│ ├── Resources/ # 资源文件
|
||||
│ ├── Settings/ # URP设置
|
||||
│ ├── Shaders/ # 自定义着色器
|
||||
│ ├── Plugins/ # 第三方插件
|
||||
│ └── OtherPlugins/ # 其他插件
|
||||
├── docs/ # 文档目录
|
||||
└── .agents/ # Agent技能配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键文件索引
|
||||
|
||||
### 核心类
|
||||
- CharacterBase: `Assets/Scripts/MainGame/Characters/Base/CharacterBase.cs`
|
||||
- Player: `Assets/Scripts/MainGame/Characters/Player/Player.cs`
|
||||
- Automata: `Assets/Scripts/MainGame/Characters/Automata/Automata.cs`
|
||||
- BattleManager: `Assets/Scripts/MainGame/Managers/BattleManager/BattleManager.cs`
|
||||
- MainGameManager: `Assets/Scripts/MainGame/Managers/MainGameManager.cs`
|
||||
- MapManager: `Assets/Scripts/MainGame/Map/MapManager.cs`
|
||||
- BuffBase: `Assets/Scripts/MainGame/Base/BuffSystem/BuffBase.cs`
|
||||
- AttackAreaBase: `Assets/Scripts/MainGame/AttackArea/AttackAreaBase.cs`
|
||||
- ItemBase: `Assets/Scripts/MainGame/Characters/Player/Items/Base/ItemBase.cs`
|
||||
|
||||
### 场景文件
|
||||
- MainGame.unity: 主游戏场景
|
||||
- Default/DefaultStreet.unity: 默认地图
|
||||
- Loading.unity: 加载场景
|
||||
- Menu.unity: 菜单场景
|
||||
|
||||
---
|
||||
|
||||
## 技术栈总结
|
||||
|
||||
| 类别 | 技术/工具 |
|
||||
|------|----------|
|
||||
| 引擎 | Unity 6+ (URP) |
|
||||
| 渲染 | POTA-Toon卡通渲染 |
|
||||
| AI | Opsive Behavior Designer |
|
||||
| 动画 | Mecanim + 自定义功能动画 |
|
||||
| 音频 | Wwise |
|
||||
| UI | Modern UI Pack + 自定义 |
|
||||
| 后处理 | 自定义URP后处理 |
|
||||
| 物理 | Unity Physics |
|
||||
| 输入 | InputSystem |
|
||||
| 特效 | Shuriken + 自定义VFX |
|
||||
| 动画IK | RootMotion FinalIK |
|
||||
| 布料 | MagicaCloth2 |
|
||||
| 响应式 | UniRx |
|
||||
| 序列化 | Sirenix Odin Inspector |
|
||||
| 对象池 | LeanPool |
|
||||
| 缓动 | DOTween |
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
157
docs/PassionSystem_GDD.md
Normal file
157
docs/PassionSystem_GDD.md
Normal file
@@ -0,0 +1,157 @@
|
||||
# Cielonos 战斗系统设计文档:激情系统 (Passion System GDD)
|
||||
|
||||
---
|
||||
|
||||
## 1. 核心设计目标
|
||||
|
||||
在二次元 3D 动作 Roguelike 游戏 《Cielonos》 中,激情系统(Passion System)旨在作为战斗流程的核心引擎。该系统不单纯作为一个“连击评分板”,而是通过将玩家的**战斗状态分流**,动态影响战斗机制:
|
||||
|
||||
* **低激情状态(D ~ B级)- “冷静/防御模式”**:
|
||||
* **设计定位**:对新手或防守型玩家友好,提供强大的**生存容错、认知缓冲与机制级防御保护**(而非单纯堆砌防御数值)。
|
||||
* **高激情状态(S ~ SSS级)- “狂热/超频模式”**:
|
||||
* **设计定位**:高风险、高回报。大幅提升进攻机动性与爆发力,但玩家也将面临更快的激情衰减以及更高的受伤惩罚。
|
||||
* **主动资源化**:玩家可以主动“倾泻/燃烧”激情值,通过消耗累积的阶段优势来换取短期的爆发性现实重构(无敌时间、时空减速)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 同类动作游戏经典设计分析
|
||||
|
||||
为避免纯数值化设计的乏味感,我们提炼了同类优秀动作游戏的反馈机制:
|
||||
|
||||
| 游戏名称 | 核心机制 | 对 Cielonos 激情系统的启示 |
|
||||
| :--- | :--- | :--- |
|
||||
| **《鬼泣》系列** | 连击评级 (D ~ SSS) 与招式多样性惩罚。受到伤害或停止进攻会导致评级骤降。 | 激情等级应引入“获取倍率随等级提升递减”和“受击流失随等级提升递增”的自我平衡公式。 |
|
||||
| **《ULTRAKILL》** | Style 评级直接影响回血速度,滑铲/空中时间/武器切换提供 Style 加成。 | 激情系统应鼓励玩家通过特定战术动作(完美闪避、切枪 combo)来获取大量激情值,而不仅是普通攻击。 |
|
||||
| **《只狼》** | 躯干值(Posture)与防守姿态。保持防御可加速躯干值恢复。 | 冷静状态不应是“挨打惩罚”,而应作为“安全整备期”,提供机制性的防守强化(如完美闪避判定帧放宽)。 |
|
||||
| **《魔女兵器》/《贝优妮塔》** | 魔女时间(Witch Time)。极限闪避触发时空断裂。 | 激情系统的短时爆发(Passion Burst)可以与时空减速或子弹时间联动,提供强烈的视听反馈。 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 核心机制设计与拆解
|
||||
|
||||
```
|
||||
激情值 (percent: 0.0 ~ 100.0%) 对应 7 个等级 (D -> C -> B -> A -> S -> SS -> SSS)
|
||||
D-Rank [0~19%] --> C-Rank [20~39%] --> B-Rank [40~59%] --> A-Rank [60~79%]
|
||||
S-Rank [80~89%] --> SS-Rank [90~95%] --> SSS-Rank [96~100%]
|
||||
```
|
||||
|
||||
### 3.1 激情的动态演变公式
|
||||
|
||||
#### 3.1.1 激情值获取 (Increase)
|
||||
玩家执行以下动作时增加百分比激情值(受当前等级的 `increaseMultiplier` 限制):
|
||||
* **普通命中**:每次攻击命中根据伤害类型基础值增加(如近战 +2%,远程 +1%)。
|
||||
* **技术动作(核心加成)**:
|
||||
* **完美闪避 (Perfect Dodge)**:直接增加当前段位所需上限的 **15%**。
|
||||
* **完美切枪 (Perfect Switch Combo)**:在动画特定后摇窗口切换主武器,直接增加 **10%**。
|
||||
* **使用特定战斗道具**:如使用激情注入药剂,瞬间提升当前级别的 **25%**。
|
||||
|
||||
#### 3.1.2 激情值自然衰减 (Decay Over Time)
|
||||
* 当玩家在 **3秒内未对敌人造成伤害且未触发完美判定** 时,激情值开始衰减。
|
||||
* 衰减速度随着激情等级急剧增加。高等级(S ~ SSS)的自然衰减率 `timeDecreaseMultiplier` 呈指数级上升。
|
||||
|
||||
#### 3.1.3 受击惩罚流失 (Reactive Loss)
|
||||
* 玩家受到攻击扣除生命值时,激情值会发生阶梯式滑落。
|
||||
* 在 SSS 级时受击,会根据 `reactiveDecreaseMultiplier` 瞬间跌落 1~2 个大级(如 SSS 跌至 A 级),造成极大的容错惩罚。
|
||||
|
||||
---
|
||||
|
||||
### 3.2 激情等级特异机制详解
|
||||
|
||||
#### 3.2.1 【低激情等级:冷静状态 (D ~ B 级)】- 认知缓冲与防御重构
|
||||
当角色激情较低说明其大脑波形处于平稳状态。高维投影少女有更多的认知带宽来解析现实空间:
|
||||
|
||||
1. **高维认知缓冲 (Cognitive Buffer Window)**:
|
||||
* **机制**:放宽**闪避(Dodge)**和**完美闪避(Perfect Dodge)**的判定无敌帧(Invincibility Frames)。
|
||||
* **效果**:在 D 级时,判定帧放宽 **50%**(如从 6 帧放宽至 9 帧),B 级时放宽 **20%**。使得新手玩家极易触发完美闪避来累积局势。
|
||||
2. **护盾被动重构 (Shield Self-Restructuring)**:
|
||||
* **机制**:当激情值低于 40%(D ~ C级)且玩家 **3秒内未受击** 时,触发高维护盾自动重构。
|
||||
* **效果**:每秒自动回复 `MaximumShield * 3%` 的护盾值,直到护盾回满或激情值升至 B 级以上。这为残血整备提供了绝对的安全感。
|
||||
3. **架势稳定(Super Armor)**:
|
||||
* **机制**:提高主角在动作释放过程中的受击抗性(Breakthrough Resistance)。
|
||||
* **效果**:自动免疫所有弱度(Weak)及中度(Medium)受击硬直,减少防守反击时被小兵打断的概率。
|
||||
|
||||
#### 3.2.2 【高激情等级:超频状态 (S ~ SSS 级)】- 高风险高回报与空间撕裂
|
||||
当角色激情极高时,其神经元处于高维过载状态。现实物理常数开始受意志影响而坍塌:
|
||||
|
||||
1. **高维共鸣爆破 (High-Dimensional Resonance)**:
|
||||
* **机制**:玩家使用 `Polychrome` 或 `FutureWand` 攻击时,会在敌人身上附着“共鸣层数”。
|
||||
* **效果**:当玩家在 S 级以上执行**主武器切换(Switch Combo)**时,新武器的登场攻击会瞬间**引爆**所有共鸣层数,造成大范围的空间重叠撕裂伤害(物理常数改写)。
|
||||
2. **高频瞬步 (Dimensional Phase Shift)**:
|
||||
* **机制**:玩家的闪避动画被替换为**高维折叠闪现**。
|
||||
* **效果**:闪避的前摇和后摇恢复帧缩短至 **0**。玩家可以连续折叠闪现,在战场中如残影般穿梭,极大提升连招上限。
|
||||
3. **双向认知过载 (Cognitive Overload)**:
|
||||
* **机制**:高维扭曲带来的代价。
|
||||
* **效果**:在 SSS 级时,玩家造成的最终伤害提升 **30%**,但受到攻击时承受的最终伤害也提升 **20%**,逼迫玩家利用高频瞬步保持无伤。
|
||||
|
||||
---
|
||||
|
||||
### 3.3 各等级量变数值映射 (Quantitative Scaling)
|
||||
|
||||
为了在定性的“质变”机制之外,为玩家提供平滑且可感知的战斗成长线,激情系统在 D 到 SSS 等级之间引入了维度的渐进数值(量变)变化:
|
||||
|
||||
1. **移动/攻击速度 (Speed Scale)**:高能量超频使动作逐渐迅捷。
|
||||
2. **能量获取模式 (Energy Economy)**:
|
||||
* **冷静侧 (D ~ B)**:提升**被动能量恢复速度**,保障玩家在防守规避与观察敌情时有充足的资源进行策略应对。
|
||||
* **超频侧 (S ~ SSS)**:被动能量停止自动恢复,大幅提升**攻击命中时的能量汲取加成**,鼓励积极拼杀获取能量。
|
||||
3. **精准与击破 (Crit & Stance Break)**:额外暴击率、暴击伤害与破韧(Stance Break)倍率随激情等级显著上升。
|
||||
4. **承伤修正比例 (Damage Mitigation/Vulnerability)**:低激情下提供受击百分比减伤,高激情下认知过载带来受击伤害加深。
|
||||
|
||||
| 等级 (Rank) | 激情值区间 | 移速/攻速倍率 | 被动能量回复 (每秒) | 攻击能量加成 | 额外暴击率/爆伤 | 韧性击破倍率 | 最终受击伤害系数 |
|
||||
| :--- | :--- | :--- | :--- | :--- | :--- | :--- | :--- |
|
||||
| **D-Rank** | 0% ~ 19% | 1.00x / 1.00x | +4.0 Energy | 1.00x | +0% / +0% | 1.00x | **0.90x (减伤 10%)** |
|
||||
| **C-Rank** | 20% ~ 39% | 1.02x / 1.02x | +3.0 Energy | 1.00x | +2% / +4% | 1.05x | **0.93x (减伤 7%)** |
|
||||
| **B-Rank** | 40% ~ 59% | 1.05x / 1.05x | +2.0 Energy | 1.10x | +5% / +10% | 1.10x | **0.96x (减伤 4%)** |
|
||||
| **A-Rank** | 60% ~ 79% | 1.08x / 1.08x | +1.0 Energy | 1.20x | +9% / +18% | 1.18x | 1.00x (无修正) |
|
||||
| **S-Rank** | 80% ~ 89% | 1.12x / 1.12x | +0.0 Energy | 1.35x | +14% / +28% | 1.28x | **1.05x (易伤 5%)** |
|
||||
| **SS-Rank** | 90% ~ 95% | 1.16x / 1.16x | +0.0 Energy | 1.50x | +20% / +40% | 1.40x | **1.10x (易伤 10%)** |
|
||||
| **SSS-Rank**| 96% ~ 100%| 1.20x / 1.20x | +0.0 Energy | 1.80x | +25% / +50% | 1.50x | **1.20x (易伤 20%)** |
|
||||
|
||||
---
|
||||
|
||||
### 3.4 终极动作:激情释放 (Passion Burst)
|
||||
|
||||
* **触发条件**:激情等级达到 **SSS 级(Percent >= 96%)**。
|
||||
* **执行方式**:玩家同时按下特殊热键(或使用爆药道具),将激情值瞬间归零(降至 D 级 0%)。
|
||||
* **触发效果 — “世界线裁定 / Reality Overwrite”**:
|
||||
* **时空断裂**:方圆 30 米内的所有敌人及子弹强制进入 **90% 减速状态**,持续 6 秒。
|
||||
* **高维投影虚无化**:玩家处于绝对无敌状态(不受任何伤害,且免疫一切硬直)。
|
||||
* **武器觉醒**:期间 `Polychrome` 攻击附带追踪剑气,`FutureWand` 普攻变为散射暴击激光。
|
||||
* 效果结束后,系统会自动进入“认知缓冲”状态,帮助玩家重新组织防守。
|
||||
|
||||
---
|
||||
|
||||
## 4. 技术实现与架构衔接方案
|
||||
|
||||
此系统应保持策划数值的可配置性,并与现有组件进行机制联动:
|
||||
|
||||
```
|
||||
[ PassionSystem ]
|
||||
|
|
||||
+---------------------+---------------------+
|
||||
| | |
|
||||
(OnPhaseChanged) (AttributeModify) (OnPerfectDodge)
|
||||
v v v
|
||||
[ Audio & VFX ] [ PlayerAttributes ] [ PlayerMovement ]
|
||||
(Dynamic Music Switch) (Shield Reg./Damage) (Invincible Frames)
|
||||
```
|
||||
|
||||
### 4.1 完美闪避判定帧修改与 `PlayerLandMovementSubcontroller.cs`
|
||||
* 在 `PlayerLandMovementSubcontroller.cs` 的 `Dodge` 逻辑中,完美闪避判定的窗口时间(如 `perfectDodgeWindow`)不再是固定值。
|
||||
* 判定时,应读取 `PassionSystem.Instance.level` 对应的加成比例。
|
||||
* **伪逻辑代码流(C# 概念参考)**:
|
||||
```csharp
|
||||
float scale = PassionSystem.Instance.GetDodgeWindowScale();
|
||||
float activePerfectWindow = basePerfectDodgeWindow * scale;
|
||||
```
|
||||
|
||||
### 4.2 护盾重构与 `AttributeSubmodule.cs`
|
||||
* 激情系统持有 `ShieldRegenTimer`。
|
||||
* 当 `level <= PassionLevel.B` 且 `timeSinceLastHurt >= 3.0f` 时,计时器累加并修改 `attributeSm[CharacterAttribute.Shield]` 的值。
|
||||
* 界面上的血条 UI (`PlayerInfoUIArea.cs`) 订阅此属性变更,同步展现能量环流动重构的特效。
|
||||
|
||||
### 4.3 音频与 Wwise 动态音乐切换
|
||||
* **激情系统的声效联动**是提升打击感(WOW感)的重点。
|
||||
* 激情等级变化时,通过 Wwise 发送 State/Switch 信号给音乐容器。
|
||||
* **D ~ B级**:原声吉他与平缓的电声合成器(冷静、低沉)。
|
||||
* **A ~ SS级**:重金属摇滚吉他与架子鼓切入,节奏加快。
|
||||
* **SSS级**:加入激昂的交响乐人声唱腔或超频电子乐,营造高潮体验。
|
||||
111
docs/Project_Summary.md
Normal file
111
docs/Project_Summary.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# Cielonos 项目工程总结与后续开发参考
|
||||
|
||||
本文件是对当前 3D 二次元 Roguelike 动作游戏项目 **Cielonos**(Soullies/Cielonos)的工程结构、已实现系统及核心设计的完整总结。旨在为后续的开发与系统扩展提供清晰的参考依据。
|
||||
|
||||
---
|
||||
|
||||
## 1. 项目基本定位与核心愿景
|
||||
* **品类**:二次元幻想风 3D 第三人称 Roguelike 动作游戏 (ARPG) + Geopolitical 局外政治议程。
|
||||
* **叙事背景**:玩家扮演人类唯一的战略希望——“高维投影少女”(Protagonist),由其 Technician(“Mother”)通过注入高维认知写入(Cognitive Writing)进行战斗与现实重构。主角因高维感知认知受损,在战场上看不到普通人类,且在战场上是绝对“不可直视”的(普通人类直视其战斗会精神失常或死亡)。
|
||||
* **核心乐趣**:局内的 Roguelike 动作 Build 搭配(多武器切换 Combo + 局内 Buff 化学反应) + 局外的 Fortress 浮空基地运营、NPC 羁绊及多阵营政治议程博弈(Alliance, Techno-Syndicate, Arcane Parliament, Mecha-Order)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 工程结构与核心模块分析
|
||||
|
||||
当前项目工程主要基于 **Unity 2022+ (URP)** 开发,融入了 Wwise 音频、Yarn Spinner 叙事、Odin Inspector 连招编辑等专业工作流。
|
||||
|
||||
### 2.1 动作与战斗系统 (`Assets/Scripts/MainGame/Characters/` & `AttackArea/`)
|
||||
* **角色基类 (`CharacterBase.cs`)**:
|
||||
* 使用多组件化设计,具备生命周期管理、伤害计算与护盾抵扣 (`TakeDamage`)、击飞/受击反馈等基础逻辑。
|
||||
* 包含 `AttributeSubmodule` 统一管理属性(Health, Armor, Shield, Speed 等),基于优先级队列注册属性修改器(Buff)。
|
||||
* 拥有 `FuncAnimSubmodule`,这是一个高度可自定义的动作片段替换框架(基于 Animator Override Batch 机制),动作段与逻辑高度解耦。
|
||||
* **玩家控制器 (`Player.cs` & `Subcontrollers/`)**:
|
||||
* `PlayerLandMovementSubcontroller`:负责精细的陆地移动、闪避(Dodge,含完美闪避 Perfect Dodge 判定)、跳跃逻辑。
|
||||
* `PlayerInputSubcontroller`:基于 Unity New Input System 的输入映射,支持局内操作与局外 UI 交互模式的平滑切换。
|
||||
* `EquipmentSubmodule`:管理玩家身上的 **4 种装备槽位**(主武器、辅助装备、被动装备、消耗品),并实现**主武器切换(Switch Combo)**时的动作缓冲区刷新及切枪机制。
|
||||
* **连招树配置 (`ComboData.cs` & `Assets/Scripts/MainGame/Items/Data/`)**:
|
||||
* 通过 ScriptableObject 编辑并在 Odin Inspector 中进行连招逻辑树的可视化配置。
|
||||
* 运行时由 `ComboSubmodule` 驱动,根据玩家输入操作(如 "L" / "R")进行节点分支转移并播放特定的战斗动画。
|
||||
* **已实现主武器 (`Assets/Scripts/MainGame/Items/MainWeapons/`)**:
|
||||
* `Yasha`(近战太刀):经典的多段连招(LightAttack0~5)、空中突袭落地的 GroundImpact。
|
||||
* `Polychrome`(多彩):拥有更复杂的连招判定与专属的 ExtraUI(如能量槽)。
|
||||
* `DualHarmony` 与 `FutureWand`:分别对应特异机制与法杖式远程攻击。
|
||||
|
||||
### 2.2 Roguelike 局内循环 (`Assets/Scripts/MainGame/GameRun/` & `Interactions/`)
|
||||
* **会话管理器 (`RunManager.cs`)**:
|
||||
* 驱动整局 Run 的状态机(Idle, MapSelection, Transitioning, InCombat, InShop, InRest, InMechanical, Settlement)。
|
||||
* 维护一局 Run 的运行时状态(`RunState`),包含当前地图坐标、历史探索节点、消耗品和击杀统计等。
|
||||
* 接入雷达系统(雷达范围、永久揭示节点类型)等为局内遗物/装备提供 API。
|
||||
* **节点地图 (`RunMapData.cs` & `Map/`)**:
|
||||
* 局内采用类似《杀戮尖塔》的多分叉网格图(`MapGenerator` 生成),包含:
|
||||
* `NormalBattle` / `EliteBattle` / `BossBattle`:战斗房间(加载 sandbox 式 CityArena 场景)。
|
||||
* `LogisticsCenter`(商店):购买各档位武器与装备。
|
||||
* `MedicalStation`(医疗站):回复生命。
|
||||
* `MechanicalTable`(机械强化台):用于重构/升级局内装备。
|
||||
* **场景加载与流程控制**:
|
||||
* `MainGameManager.cs`:主管理器,在战斗场景(`CityArena`)和基地场景(`Fortress`)初始化不同逻辑。
|
||||
* 结合 `UIPageManager` 在打开 UI 页面时自动锁定/解锁鼠标与物理输入。
|
||||
|
||||
### 2.3 剧情与叙事系统 (`Assets/Story/` & `Narrative/`)
|
||||
* 采用 **Yarn Spinner** 作为核心对话与文本驱动工具。
|
||||
* 包含 `StoryDirector.cs`,管理剧情任务、对话触发器(`NarrativeTriggers`)及运行时对话数据的传递。
|
||||
* 配备了 `CielonosStoryProject.yarnproject` 及 `Tutorial_Guide.yarn`,定义了基础的引导流程及 NPC IDs。
|
||||
|
||||
---
|
||||
|
||||
## 3. 后续工作方向与规划(脱离 Demo 路线图)
|
||||
|
||||
要让 Cielonos 从 Demo 迈向可玩的完整游戏,需要系统性地完善局外循环、打磨局内手感、细化 AI 机制,并实现剧情阵营系统的联动:
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[脱离 Demo 路线图] --> B[核心战斗打磨]
|
||||
A --> C[局外系统构建]
|
||||
A --> D[关卡与 AI 丰富]
|
||||
A --> E[叙事与议程联动]
|
||||
|
||||
B --> B1[Switch Combo 切枪特效与连击增益]
|
||||
B --> B2[Buff 化学反应体系 - 属性附着与爆破]
|
||||
|
||||
C --> C1[基地 R&D 终端 - 局外蓝图/经费解锁]
|
||||
C --> C2[浮空要塞 NPC 局外交互与整备]
|
||||
|
||||
D --> D1[Opsive 行为树高级 AI - 防守/反击/阶段转换]
|
||||
D --> D2[地图生成随机事件 Event 节点实现]
|
||||
|
||||
E --> E1[Geopolitical Agenda 政治议程面板]
|
||||
E --> E2[Fortress 情绪禁令机制 - 异常值波动控制]
|
||||
```
|
||||
|
||||
### 3.1 核心战斗与 Build 体系深挖
|
||||
1. **多武器切换联动 (Switch Combo)**:
|
||||
* 细化武器在切换瞬间的“切枪伤害”或“切枪加成”(如 Yasha 切换到 FutureWand 时释放特殊的追踪弹幕)。
|
||||
* 在 UI 上提供明显的切枪可操作时间视窗(完美切枪时点)。
|
||||
2. **Buff 元素与化学反应 (Buff Chemistry)**:
|
||||
* 细化多阵营装备带来的 Buff 体系。例如 Arcane 装备附着“魔导熵”,结合 Syndicate 的“计算标记”可触发“概率运算暴击”。
|
||||
* 完善属性状态机,使得 Buff 之间的反应可配置化(`BuffSubmodule` 扩展)。
|
||||
|
||||
### 3.2 浮空要塞 (Fortress) 与局外 meta-progression
|
||||
1. **R&D 科研与装备解锁系统**:
|
||||
* 引入局外升级货币:“经费”(Marks)与“蓝图”(Blueprints,Elite/Boss 概率掉落)。
|
||||
* 建立局外解锁终端(科技树 UI),允许玩家利用蓝图解锁原本无法在局内商店购买的高阶武器、辅助装备,或提升主角基础面板。
|
||||
2. **政治议程系统 (Geopolitical Agenda)**:
|
||||
* 建立阵营好感度/资源平衡面板。玩家在 Fortress 场景的终端上处理地缘政治决议,在几大阵营(Alliance West/East, Syndicate, Parliament)中做抉择。
|
||||
* 不同的阵营决议会直接解锁不同路线的科技树蓝图购买权限。
|
||||
|
||||
### 3.3 敌人 AI 与关卡事件
|
||||
1. **Opsive 行为树战术精细化**:
|
||||
* 当前的 Enemy AI 仅有基础攻击,应利用 Blackboard 变量根据关卡深度动态开启 AI 的防守、防反、闪避与大招释放逻辑(例如普通攻击会被敌人架招,迫使玩家使用破盾技)。
|
||||
2. **地图 Event 随机节点补充**:
|
||||
* 局内网格除了战斗/商店/医疗/机械台,需要实现 `Event` 节点。通过 Yarn Spinner 对话形式提供叙事选择,给予局内临时增益或以血换物等 Roguelike 经典事件。
|
||||
|
||||
---
|
||||
|
||||
## 4. 后续开发核心提问
|
||||
|
||||
为了让我们能够精准对齐当前的开发进度并制定出一套高效的、可落地的 Implementation Plan,希望您能先解答以下几个关键问题:
|
||||
|
||||
1. **当前战斗手感与完成度**:目前主角的移动、闪避、连击(以太刀 Yasha 为例)在编辑器中测试时,整体的动画流畅度与受击反馈(Hitstop、硬直、Blink 效果)是否已经调整到满意的基准?是否存在已知的物理碰撞或动画批处理 Overrides 相关的 Bug 需要首要修复?
|
||||
2. **武器与装备资源的丰富度**:对于主武器(如远程/近战)与辅助装备的 3D 模型、特效(VFX)以及动作资源(Animation Clips),美术资产储备是否充裕?下一步是需要我们从底层开始以代码形式补充大量新武器的功能逻辑,还是优先完善已有的 Yasha、Polychrome 等武器的机制细节?
|
||||
3. **基地 Fortress 场景与 UI**:目前 Fortress 场景是否已经完成了关卡场景的搭建并具有可交互的 NPC 占位?另外,关于 meta-progression 面板(蓝图研究、经费升级)以及地缘政治“议程决议”的 UI,是否已有相关的 UI 设计稿或 Prefab 框架,还是完全需要从零设计并基于 UI Toolkit / UGUI 搭建?
|
||||
71
docs/archive/characters/key_npcs.md
Normal file
71
docs/archive/characters/key_npcs.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# 核心NPC与玩法功能设定 (Core NPCs & Gameplay Systems)
|
||||
|
||||
本要塞专属区中聚集的8名核心NPC拥有各自交错的剧情路线,并且在游戏中直接挂钩了特定的局外养成、基地建设、装备研发或剧情分支系统。
|
||||
|
||||
---
|
||||
|
||||
## 1. 专属技术员 / 医护(“养母”)
|
||||
* **解锁时机**:游戏开局即在。
|
||||
* **背景设定**:在主角经历极其残酷的人体实验期间唯一的操作者与负责人,对主角有着近乎病态的溺爱与保护。长期遭受高维灵能的精神污染。
|
||||
* **功能系统**:
|
||||
* **新手引导**:在游戏开局引导玩家熟悉基本的战斗与整备流程。
|
||||
* **局外天赋成长**:为玩家提供主角高维灵能天赋属性的永久性局外增益与属性成长。
|
||||
* **心理治疗机制**:随着剧情推进,在要塞安稳环境下她的精神状态会逐渐趋于稳定和冷静。
|
||||
|
||||
## 2. 舰长 / 后勤部队总司令(“养父”)
|
||||
* **解锁时机**:他作为浮空要塞的总指挥官与管理者,实际上从游戏开局就一直在要塞中大局统筹。但由于开局阶段面临极其紧急的军务调度,主角在通关前几次正式任务后,才能在专属服务区内正式见到他并解锁对话交互。
|
||||
* **背景设定**:技术员(“母亲”)的丈夫,联盟高级将领,行事沉稳可靠。指挥要塞进行频繁的不规律移动以躲避教团截击,是要塞家属区和防卫力量的实际管理者,在主角眼里是可靠的“父亲”形象。
|
||||
* **功能系统**:
|
||||
* **要塞建设与升级**:负责浮空要塞的基础设施建设、功能区解锁与要塞等级升级。
|
||||
* **要塞厨房系统**:
|
||||
* 随着主角声望(指救援度)的提升,厨房可解锁的菜谱会逐渐增多。
|
||||
* 主角在出击前可以吃大餐以获得各种属性增益。
|
||||
* 玩家也可以选择让主角食用“黑暗料理”:这虽然会赋予主角各种恶劣的战斗负面诅咒,但在通关后会大幅提升该局的结算评分与经费收益。
|
||||
|
||||
## 3. 联盟代表科学家(西方)
|
||||
* **解锁时机**:游戏开局即在。
|
||||
* **背景设定**:代表国际联盟的西方派系尖端研究机构。
|
||||
* **功能系统**:
|
||||
* **西方高端装备研发**:负责研发国际联盟西方机构的各种尖端高维装备。
|
||||
* **通用军工装备研发**:同时代为研发联盟东方机构军工复合体所生产的坚实耐用型通用装备。
|
||||
|
||||
## 4. 国际联盟新任总统(前副总统)
|
||||
* **解锁时机**:在舰长登舰后,玩家再完成数次任务后登舰。
|
||||
* **背景设定**:吉祥物副总统因老总统遇袭牺牲而尴尬即位。带部分行政人员来到要塞避难兼办公。
|
||||
* **功能系统**:
|
||||
* **政治议程系统**:她的登舰标志着“政治议程系统”的正式解锁,玩家开始能够在要塞中参与关乎整个人类社会大事件的政策决策。
|
||||
* **人性引导者**:在剧情上,她极力通过自己的政治理念对主角进行传统的“教育”与心理建设,试图将主角向富有人性、承担社会责任的“好”方向引导。
|
||||
|
||||
## 5. 联盟代表科学家(东方)——“企业主”
|
||||
* **解锁时机**:在总统登舰后随即上船。
|
||||
* **背景设定**:东方最具权势的巨头资本家和政治大佬,也是“新州制造”的实际掌控者。为了在要塞上制衡总统而登舰。
|
||||
* **功能系统**:
|
||||
* **机械扈从研发**:负责研发与升级由主角灵能控制的二次元可爱战斗扈从(简易AI跟班,在主角的高维控制下战力可达Nexus级)。
|
||||
* **财务支持**:在玩家面临经费危机时,会提供巨额马克支持(甚至能大方赠予主角1亿马克作为“零花钱”)。
|
||||
* **神性/理性引导者**:在剧情上与总统针锋相对。他主张主角应当摆脱弱小人类社会的道德枷锁,以绝对理性和力量维持秩序。他将主角视作高维的神明,以“更理智、更尊重、更忠诚”的方式把主角向掌控无上力量的另一个“好”方向引导。
|
||||
|
||||
## 6. 宣传联络官 / 记者
|
||||
* **解锁时机**:在东方科学家登舰后随即出现。
|
||||
* **背景设定**:与主角年龄相仿的女孩,性格活泼,是主角的忠实仰慕者。
|
||||
* **功能系统**:
|
||||
* **情报传递**:为闭塞于专属服务区的主角带去外界浮空群岛的局势消息。
|
||||
* **声望管理系统**:将主角的不可名状高维战斗进行极度正面化与文学化的包装宣传。向外界播报,美化主角以不断提升主角在全球平民中的声望(直接影响厨房菜谱的解锁)。
|
||||
|
||||
## 7. 技管法团代表科学家
|
||||
* **解锁时机**:游戏中期登舰。
|
||||
* **背景设定**:来自科技高度发达、已进入基于超级计算机分配的“共产主义”的大陆技术领。义体化极高。
|
||||
* **功能系统**:
|
||||
* **算力装备研发**:专门研发与生产技管法团流派的高精尖算法辅助与极致量化硬件装备。
|
||||
|
||||
## 8. 奥术议会代表科学家
|
||||
* **解锁时机**:游戏中期登舰。
|
||||
* **背景设定**:代表魔导具科学高度发达、社会制度退化为蓄奴寡头共和制的魔导国。
|
||||
* **功能系统**:
|
||||
* **魔导具装备研发**:研发将高维能量进行“熵增转化”的魔导科技装备,需要配合主角自身无与伦比的魔力基因进行施展。
|
||||
|
||||
## 9. 机械教团“叛逃”科学家
|
||||
* **解锁时机**:游戏后期登舰。
|
||||
* **背景设定**:教团的高阶脑成员(合成人),在漫长的实验或自我计算中发生了偏离而“叛逃”至人类一方。
|
||||
* **功能系统**:
|
||||
* **教团科技研发**:研发融合了机械教团原生态尖端科技的邪道与终极强力装备。
|
||||
* **秘密揭示者**:在游戏大后期充当关键的剧情推手,逐步在交互中为玩家揭开机械教团同化的核心意图以及那名高维穿越者遗留实验的古老真相。
|
||||
36
docs/archive/characters/protagonist.md
Normal file
36
docs/archive/characters/protagonist.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# 主角设定:高维灵能少女
|
||||
|
||||
## 1. 角色背景与定位
|
||||
* **身世**:由“国际联盟”主导的“高维与灵能研究项目”的唯一成功实验体。
|
||||
* **外表**:一位年轻的少女。
|
||||
* **地位**:人类阵营唯一能够与机械教团抗衡并击败它们的战略级希望。
|
||||
|
||||
## 2. 核心能力:高维投影 (High-Dimensional Projection)
|
||||
* **能力本质**:主角获得了来自更高维度的力量,这股力量无法用当前世界的常规物理/科学规律来解释。
|
||||
* **表现形式**:她能以干涉维度的方式扭曲现实。例如,通过在脑海中想象“两点之间的空间根本不存在”,从而跨越物理限制实现瞬间移动。
|
||||
* **战斗表现**:她的攻击和防御手段同样源自高维规则的改写。
|
||||
|
||||
## 3. 核心限制与代价:认知畸变与“认知编写”
|
||||
* **正常心智与过滤感官的共存**:
|
||||
* **明确常识**:主角在智力、逻辑与常识上是完全健康的。她知晓社会的基本常识,能理解金钱经费(马克)、军事任务、战友盟友、敌我关系以及装备研发升级等概念。
|
||||
* **感官物理阻断**:她的异变主要发生在生理和感知层面上。高维能量破坏了她直接观测真实物理世界的能力,而技术员(母亲)通过直接注入脑部的“认知滤网”,将战场和高维武器过滤成了符合二次元轻科幻审美的样子。
|
||||
* **美术视觉与叙事澄清**:二次元是游戏外在的艺术风格,不代表主角认知自己是卡通纸面人。游戏内只制作一套轻科幻美术资源以控制开发成本,高维战斗扭曲反差全部由对话与文学性文字说明。
|
||||
* **认知盲区(无法观测普通人)**:主角的认知体系中完全没有“普通人类”的概念与逻辑。普通平民对她而言类似于隐形人或背景尘埃。这导致她只要主观上不想,通常不会在战区主动作恶,但也让她与正常人类社会彻底隔绝。
|
||||
* **物理活动与社交限制**:要塞内部专属服务区的局限与注册社交规则。
|
||||
|
||||
## 4. 高维灵能项目的绝密史
|
||||
* **军事机密起源**:在游戏历史中,针对主角的“高维与灵能研究项目”最初是作为国际联盟在重新统一世界战争中的“终极决战兵器”秘密研发的,用以应对实力强大的技管法团与奥术议会。
|
||||
* **项目降级与被弃**:随着统一战争以联盟的两线惨败、东部媾和收尾,联盟财政吃紧,该项目因失去了原本的针对目标而被官方大幅调低优先级,甚至险些宣告终止。
|
||||
* **养母的疯狂坚持**:在此绝境下,该项目唯一的医疗技术员(后来的“养母”)因遭受微弱高维能量的物理与心理污染,表现出接近偏执狂的热诚。她违抗了上级停止研发的意图,不惜一切代价、在极度简陋的非官方条件下独力推进实验,最终使高维投影技术在主角的身体中成功显现。
|
||||
* **救世终局**:在机械教团发动无差别扫荡、人类防线全面溃败的当下,这个曾经被边缘化、由疯癫技术员强行保下的绝密实验体,反而成了人类文明唯一的火种。
|
||||
|
||||
## 5. 梦境投射 (The Projection of Dreams)
|
||||
* **梦境机制**与**记忆消散**。
|
||||
|
||||
## 6. 武器与升级的虚实反差
|
||||
* **武器反差示例**:主角视角中的“星源光刃”,在真实世界中是一个高维物理畸变发生器。
|
||||
* **升级机制的本质**:利用“经费”与击败精英敌人获得的“蓝图”来进行科研升级。
|
||||
|
||||
## 7. 社交纽带与要塞规则
|
||||
* **唯一的技术员(母亲)**:主角只接受她唯一的专属技术员的认知编写与日常照料。两人之间存在深刻的共生和情感波动共享关系。
|
||||
* **浮空要塞禁令**:由于主角与技术员共享情感波动,且高维灵能对情绪极度敏感。为了防止引发灵能暴走或精神污染,浮空要塞基地规定:所有基地人员在主角 and 技术员面前绝对不能展露出任何强烈的负面情绪。
|
||||
50
docs/archive/outlines/main_outline.md
Normal file
50
docs/archive/outlines/main_outline.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Cielonos 游戏剧情主线大纲 (Main Narrative Outline)
|
||||
|
||||
## 一、 世界观背景 (The World & History)
|
||||
* **大灾变与破碎大地**:大灾变导致地球碎裂成悬浮空中岛屿,物理常数改变催生了反重力与折跃等科技。部分地壳和地幔升入高空,成为重建荒野城市的新生岛屿。
|
||||
* **视觉与美术表现原则**:游戏统一呈现美丽的“二次元未来轻科幻”风格。故事内部,主角拥有正常常识与心智。为控制成本,不制作两套美术资产,所有感官层面的高维战斗扭曲反差,将完全通过文本、人物对话以及NPC的战栗反应进行文学化表达。
|
||||
* **历史割裂**:国际联盟在大灾变后发动的统一战争遭遇两线惨败(东线败于技管法团,西线败于奥术议会),联盟内部东、西方派系自此深埋宿怨。
|
||||
|
||||
## 二、 核心人物与动机 (Characters & Motivations)
|
||||
游戏在浮空要塞专属服务区中设计了8位核心交互NPC,各自承担独特的玩法与剧情分工:
|
||||
1. **专属技术员 / 医护(“养母”)**:开局即在。对主角极度溺爱并试图治愈自身的精神污染。提供新手引导和局外灵能属性的天赋永久成长。
|
||||
2. **舰长 / 后勤部队司令(“养父”)**:战后不久登舰。指挥移动要塞不规律机动避敌。提供要塞建设升级系统以及“厨房食物Buff/黑暗料理”系统。
|
||||
3. **联盟代表科学家(西方)**:开局即在。负责研发联盟西方尖端高维装备,代研东方军工复合体的耐用通用装备。
|
||||
4. **国际联盟新任总统**:前副总统因老总统牺牲补位,上船避难。解锁“政治议程系统”,并在剧情上将主角引向承担人性与责任的“好”方向。
|
||||
5. **联盟代表科学家(东方)——“企业主”**:东方政治资本大鳄,为制衡总统上船。提供“机械扈从”(小跟班)研发与经费赠予。在剧情上以理性与力量的“神性”化方向引导主角,与总统对立。
|
||||
6. **宣传联络官 / 记者**:为制衡东方大鳄而登舰。主角仰慕者,提供外界大局情报并包装宣传主角,管理声望。
|
||||
7. **技管法团代表科学家**:中期登舰。研发极致算力与量化硬件装备。
|
||||
8. **奥术议会代表科学家**:中期登舰。研发增熵转化科幻魔导具,其增熵不影响宇宙宏观,但局部滥用会导致异化岛屿。
|
||||
9. **教团“叛逃”科学家**:后期登舰。研发教团逆向武器,在剧情上揭开教团同化使命与高维穿越者的废弃实验真相。
|
||||
|
||||
## 三、 核心游戏循环与大纲结构 (Game Loop & Outline Chapters)
|
||||
|
||||
### 【序章:最初的试炼】
|
||||
* **登舰NPC**:主角、养母、西方科学家。
|
||||
* **剧情事件**:主角与西方科学家研制出第一把武器“星源光刃”(高维畸变发生器)。
|
||||
* **关卡目标**:前往边缘的小城市进行实战测试,清理教团的 Node(纯机械小兵)。
|
||||
* **阶段转折**:战斗胜利,但战后验收人员发现目击者大面积发疯死亡。联盟向全球发送“严禁普通人类以任何方式观测主角战斗”的紧急广播。
|
||||
|
||||
### 【第一章:诡异的和平与要塞整备】
|
||||
* **登舰NPC**:后勤司令养父正式在专属区露面(他开局便在此管理要塞,此时主角方得引见),解锁要塞建设与厨房系统。
|
||||
* **剧情事件**:机械教团改变战术,转为小规模但致命的骚扰突袭。要塞实行冷酷的“情绪禁令”,所有人极度压抑情感。
|
||||
* **游戏玩法**:教团由 Node、Nexus 和 Core 组成,具备去中心化重构链。击败 Core(Boss)后,Nexus 仍会重组临时指挥链,允许玩家在局内继续清理剩余节点。玩家在要塞利用经费(马克)和击败 Core 掉落的“蓝图”进行科研升级。
|
||||
|
||||
### 【第二章:政治议程与局外投资】
|
||||
* **登舰NPC**:总统登船,解锁政治议程;随后东方科学家上船以制衡总统,解锁机械扈从研发;记者登船,通过包装主角来管理声望。中期法团与魔导国科学家陆续进驻。
|
||||
* **剧情事件**:前线局势在拉锯战下相对稳定。在“诡异的和平”下,大后方的历史与地缘冲突再次爆发。次要灰色势力必须托庇于大势力伞下。
|
||||
* **玩法拓展**:
|
||||
* **政治议程系统**:玩家在要塞博弈大事件,其倾向和抉择将**直接改变后续战斗场景的物理状态或敌人强度/配置**。
|
||||
* **局外投资系统**:玩家可以用经费投资优化浮空要塞与三大势力(技管法团除外,因其已废除货币),改变地图机制并影响剧情。
|
||||
* **梦境叙事**:关卡间隙,主角会做混沌的“平民之梦”体验底层苦难,醒来时消散。该梦境仅展示给玩家。
|
||||
|
||||
### 【第三章:双向引导、政治决裂与崩溃危机】
|
||||
* **剧情事件**:总统(人性引导)与东方科学家(神性/秩序引导)在主角教育和政治决策上持续冲突。局势最终决裂,西方革命爆发,东方大鳄科学家实施一夜科技大清洗。女总统得知既定事实后理想崩溃,打破情绪禁令引发灵能暴走(此危机可由玩家先前得当的决策平稳渡过)。
|
||||
|
||||
### 【终章:最后的终局与未来走向】
|
||||
* **登船NPC**:叛逃科学家登舰,提供终极装备并揭示教团真相。
|
||||
* **剧情事件**:教团大反攻,主角扫平终极 Core,揭露穿越者扭曲规律后弃置世界的过往。
|
||||
* **多结局分化**:
|
||||
* **统一线**:根据政治偏好与双向引导(人性 v.s. 神性),分为**【温和左翼统一】**、**【温和右翼统一】**与**【极端右翼霸权统一】**。
|
||||
* **分裂线**:联盟彻底名存实亡,东方与西方划江冷战。
|
||||
* **母女结局**:养母精神在要塞得到治愈,物理永生的主角以高维投影保护母亲,母女相伴走向永恒。
|
||||
50
docs/archive/world_building/factions.md
Normal file
50
docs/archive/world_building/factions.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# Cielonos 势力设定
|
||||
|
||||
## 1. 国际联盟 (International Alliance)
|
||||
* **背景定位**:灾变前基本统一世界的庞大组织。大灾变后,其统治范围主要整合了亚欧非三大洲的浮空岛屿。
|
||||
|
||||
### 1.1 西方基本盘(欧洲与非洲)
|
||||
* **社会形态(福利主义与依附)**:
|
||||
* **欧洲浮岛**:凭借发达的高端产业和优秀的教育资源,欧洲区域维持着全联盟最高的人均GDP。社会建立起了极度完善的福利保障制度,为低收入者和无业者提供充足的基本生活保障。社会民意广泛倾向温和的社会民主主义以及更激进的左翼思想,这些思想在历史上均已通过议会斗争合法化并曾上台执政。
|
||||
* **非洲浮岛**:在架空历史中未能获得完全独立,政治上依附于欧洲。非洲区域目前唯一的财富是地下埋藏的资源。普通人通过“团结税”(欧洲的财政转移支付)生活无虞,但由于缺少工业,资源开采站之外几乎没有工作机会,绝大多数人在白送的津贴下浑浑噩噩度日。
|
||||
* **主要党派**:
|
||||
* **社会民主党**:走议会路线的温和左翼党派。
|
||||
* **工党**:思想激进的左翼党派,在大后期选举失败后倾向于支持场外革命。
|
||||
* **大众革命党**:主张暴力夺权与激进变革的左翼党派,此前已被联盟官方依法取缔。
|
||||
|
||||
### 1.2 东方基本盘(亚洲与澳洲)——“企业政府”
|
||||
* **政治与经济体制(兴亚银行)**:
|
||||
* **企业政府 (Corporatocracy)**:在灾后重建中,东方走上了极具特色的企业政府路线。由51位顶级财阀寡头联合建立的**“兴亚银行”**董事会,实质上成为了东方的最高决策中枢。传统的国家政府被完全边缘化,降格为在银行拨款的前提下,负责执行公共服务与行政事务的下属部门。
|
||||
* **阶级对立的妥协**:在天空世界的狭窄空间内,资本已无更低成本的区域可以转移。财阀寡头被迫直面最原始的“资本家与工人对立”。因此,寡头们选择主动让渡部分超额利益,出资促进就业与底层消费,成功将“贫穷的工人”转化为“有钱的小市民”,缓和了劳资矛盾。令人意外的是,东方的贫富差距甚至比实施高福利的欧洲还要小。
|
||||
* **澳洲占领既定事实**:重建期间,东方通过有组织的移民和控制,强行将原本亲西方的澳洲纳入自己的势力板块。
|
||||
* **主要党派**:
|
||||
* **统一自由党**:东方的主要执政党,党派内部细分出多个代表不同财阀和地缘利益的派系。
|
||||
* **社会民主党(东方分支)**:拥有大量东方普通市民的支持,但在整体策略上比西方分支更为稳健温和。
|
||||
|
||||
### 1.3 阵营宿怨与裂痕
|
||||
* **背叛的指控**:在先前的统一战争中,国际联盟东方军在战况不利的前提下率先与“技管法团”媾和。西方许多民众和激进派政客将此视作对西方远征军的“可耻背叛”。
|
||||
* **意识形态的敌意**:西方传统的激进左翼党派(如工党和被取缔的大众革命党)拒绝承认东方“企业政府”的合法性,将其蔑称为“反动的资产阶级专政”,在议会与舆论中对东方抱持极强的政治敌意。
|
||||
* **政治遗产危机与老总统之死**:
|
||||
* **总统的政治功能**:总统作为名义上的最高元首,拥有法案签字权。老总统在任时,主要通过拖延或拒签“破坏分裂性法案”,强迫西方政客向东方妥协,勉强维系和平。
|
||||
* **老总统的担忧**:老总统死前极度担忧西方的温和左翼(社民党)会因为迎合选民而与激进派(工党)甚至非法激进分子联手。因为这会导致东方的社民党支持者被推向保守的统一自由党,从而加速联盟的彻底分裂。
|
||||
* **权力真空的崩溃**:老总统的牺牲彻底打破了这一脆弱的平衡,接替大位的菜鸟女总统完全无法制衡狂飙的激进派与冷酷的东方资本大鳄。
|
||||
|
||||
---
|
||||
|
||||
## 2. 技管法团 (Techno-Technocratic Syndicate / 大陆技术领)
|
||||
* **背景定位**:在规律改变后迅速崛起的科技巨头政权。
|
||||
* **社会形态**:人口稀少。由于拥有最强大的算法与硬件系统,他们使用一台超级计算机对全社会所有人的需求、生产和分配进行全方位的量化分析与预测。他们自称在此基础上已经实现了“共产主义”,并已彻底废除了货币系统。
|
||||
* **技术特征**:提供与西方联盟抗衡、甚至在特定硬件指标上更为高超的极限算力装备。但其研究领域比较局限在特定硬件和量化增幅方向。
|
||||
|
||||
## 3. 奥术议会 (Arcane Parliament / 魔导国)
|
||||
* **背景定位**:由大灾变后新诞生的经验科学——“魔法”所主导的国度。
|
||||
* **物理本质与装备**:魔法是一门将“熵”转化为效果的经验科学。奥术议会科学家进驻要塞后,专注于为主角研发结合了魔法与高科技的“科幻魔导具”。因为主角自身也具备了无与伦比的“魔力”基因,能完美驾驭魔导具产生的熵能转化。
|
||||
* **社会形态**:个体暴力上的绝对不平等,类似罗马共和国的蓄奴寡头共和制。
|
||||
|
||||
## 4. 机械教团 (Mecha-Order)
|
||||
* **起源背景**:来自高维度的“穿越者”在此世界进行的实验产物。
|
||||
* **同化与手术限制**:由于高维穿越者未提供完整、规模化的工业生产技术,教团的机械同化速度受限。
|
||||
* **级层指挥架构 (Command Hierarchies)**:分为 Node、Nexus、Core 三级层。
|
||||
* **指挥链的动态重构**:斩首 Core 后残余 Node 和 Nexus 动态重组,允许玩家在击败 Boss 后继续探索。
|
||||
* **占领区与社会秩序**:代际适应与终极解脱与飞升。
|
||||
* **战术演变**:转入小规模致命袭击,暗中挑拨人类内战。
|
||||
46
docs/archive/world_building/world_setup.md
Normal file
46
docs/archive/world_building/world_setup.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Cielonos 世界观基础设定
|
||||
|
||||
## 1. 世界构成与物理法则 (World Structure & Physics)
|
||||
- **天空之界 (Cielonos)**:一场未知的大灾变导致地球崩碎,世界演变为无数悬浮在空中的岛屿。
|
||||
- **物理常数与规则的改变**:大灾变不仅改变了地貌,更导致大量原本无解的科学规律/物理常数发生了根本性的变化。这使得反重力科技、空间折跃科技等在这个世界得以实现。
|
||||
- **地质与新岛屿**:破碎的世界中,一部分原本属于地球深处的“深层地壳和地幔”上升成为了新的空中岛屿。这些荒凉地段起初无法开发,但随着人类重获稳定,在其上建立起了全新的荒地城市。
|
||||
- **多元科技树分支**:物理规律的变化导致了截然不同的科技路线在不同地域生根发芽,构成了如今各大势力的立身之本。
|
||||
- **高维穿越者的废弃实验**:所谓的规律畸变与机械教团的诞生,源于一个曾经降临的高维穿越者所做的实验。实验后,该穿越者弃置了实验体(机械教团的前身)离去,对世界的直接干涉已告终结。
|
||||
|
||||
## 2. 视觉表现与叙事反差的开发原则 (Art Direction & Narrative Rationale)
|
||||
- **视觉定性**:“二次元未来轻科幻”是游戏的整体视觉美术表现(包括主角建模、技能特效以及UI风格)。主角在心智层面上拥有正常健全的人类逻辑与常识。
|
||||
- **制作原则(不细究对比)**:为确保工程的高效落地,游戏内不会制作两套美术资产。主角生理认知畸变与现实真相的反差,将完全在特定剧情节点和台词中通过文字简单说明,视觉表现统一维持纯粹美丽的轻科幻风格。
|
||||
|
||||
## 3. 都市风貌对比 (Urban Aesthetics)
|
||||
- **国际联盟**:整体呈现现代-近未来风格。
|
||||
* **西方城市**:建设自由、重人文关怀,保留了大量大灾变前的历史保护建筑。
|
||||
* **东方城市**:高度规划与秩序,社会流转与建设效率极高。
|
||||
- **技管法团 (大陆技术领)**:核心区完全是一望无际的精密钢铁。整个生态系统由化学和工业驱动,除人类和少量微生物外全部灭绝。
|
||||
- **奥术议会 (魔导国)**:魔导贵族聚居在辽阔庄园,无魔平民与奴隶在拥挤混乱的城中心求生。使用魔法导致的增熵仅是宇宙的沧海一粟,但在局部的滥用会制造气候异变的特殊浮空岛。
|
||||
|
||||
## 4. 架空地缘历史线 (Alternative History Timeline)
|
||||
本游戏基于一条“关键历史节点被改写”的现实世界架空历史:
|
||||
* **大灾变前的世界格局**:
|
||||
* **西方基本盘(法国与奥地利主导)**:在早期的世界大战中,法国与奥地利联手击败了英国、西班牙、俄国,成为了战后秩序的主导者,并在欧洲本土成功遏制了北德意志和意大利的共产主义革命。随着欧洲的战后繁荣,社会民主主义和部分激进左翼思潮通过议会民主斗争和平上台。由于在亚洲扩张受阻,殖民目光转投非洲,导致非洲在政治上未能完全独立,长期依附于欧洲。
|
||||
* **东方基本盘(日本“泛亚协和”主导)**:日本放弃了“脱亚入欧”的路线,转而支持“泛亚协和”,鼓动并支持亚洲民族独立运动。在第一次日俄战争取得压倒性胜利后,依靠团结的东亚建立起当时世界上最强大的地缘集团。此后趁欧洲世界大战之际进攻东南亚和印度取得胜利,以宽松条件促使其摆脱欧洲殖民者并加入日本主导的东方集团。
|
||||
* **美洲基本盘**:美国爆发社会主义革命并取得成功,在美洲大陆进行了社会主义扩张,并加入了旧的国际联盟。
|
||||
* **大灾变与重建**:
|
||||
* 大灾变导致地球碎裂,国际联盟宣告毁灭。在经历漫长的混乱后,东方和西方派系各自完成了独立的社会重建。美洲则在灾后偶然走上了完全不同的发展道路,断绝了与联盟的联系。
|
||||
* 重建期间,东方利用西方无暇他顾的契机,强行占据了原本亲西方的澳洲,并通过大规模移民制造了既定的地缘政治事实。
|
||||
|
||||
## 5. 核心冲突与局势演变 (Core Conflicts & Global Situation)
|
||||
- **第一阶段:爆发与溃退**:机械教团突然发动无差别进攻。人类各势力毫无互信,节节败退,常规力量退守少数关键大城市。
|
||||
- **初始任务与“不可观测”广播**:主角首战大捷。但由于常人观测高维战斗会发疯或死亡,迫使官方发送“严禁普通人类以任何方式观测主角战斗”的全球紧急广播。
|
||||
- **“诡异的和平”与第二阶段相持**:
|
||||
* **教团的战术转变**:教团在发现无法短时间击败主角后,战术转为小规模的骚扰性袭击。这些袭击虽然规模不大,但对人类常规防御依然致命,必须由主角出面摆平。
|
||||
* **次要势力处境**:非官方次要势力必须依附于某个主要势力作为“保护伞”才能存活。
|
||||
- **第三阶段(大后期):人类大撕裂与要塞危机(分支路线)**:
|
||||
* 选举与革命、东方科技大清洗以及女总统在要塞因理想损灭引发情绪崩溃(此事件可通过合理政治决策避免)。
|
||||
|
||||
## 6. 游戏系统与关卡融通 (Game Design & Narrative Integration)
|
||||
- **游戏类型**:Roguelike(关卡内高维战斗,关卡外整备与宏观政治决策)。
|
||||
- **局外循环货币**:经费(马克)与蓝图。
|
||||
- **局外投资优化系统 (Investment System)**:
|
||||
* 玩家可以额外付出经费,对浮空要塞以及除了“技管法团”(其已废除货币实现共产主义)之外的其他三大人类势力进行投资与优化。
|
||||
- **剧情-战斗互融 (Narrative-Gameplay Integration)**。
|
||||
- **梦境叙事**:主角做平民之梦体验底层苦难,醒来时消散,梦境画面直接向玩家展示。
|
||||
@@ -1,782 +0,0 @@
|
||||
# 动作游戏3C设计理论
|
||||
|
||||
## 什么是3C?
|
||||
|
||||
3C是动作游戏开发中最核心的概念,指的是:
|
||||
- **Character(角色)**: 游戏角色的外观、动画和动作
|
||||
- **Camera(摄像机)**: 玩家观察和体验游戏世界的视角
|
||||
- **Control(操控)**: 玩家输入与角色响应之间的交互
|
||||
|
||||
这三点直接影响玩家的**手感**、**沉浸感**和**游戏体验**。
|
||||
|
||||
---
|
||||
|
||||
## 一、Character(角色)设计原则
|
||||
|
||||
### 1.1 角色基础属性
|
||||
|
||||
#### 1.1.1 移动参数
|
||||
```csharp
|
||||
public class CharacterMovementConfig
|
||||
{
|
||||
// 速度参数
|
||||
public float walkSpeed = 3.0f; // 行走速度
|
||||
public float runSpeed = 7.0f; // 奔跑速度
|
||||
public float sprintSpeed = 10.0f; // 冲刺速度
|
||||
|
||||
// 加减速
|
||||
public float acceleration = 10.0f; // 加速率
|
||||
public float deceleration = 15.0f; // 减速率
|
||||
public float turnSpeed = 10.0f; // 转身速度
|
||||
|
||||
// 跳跃参数
|
||||
public float jumpForce = 8.0f; // 跳跃力度
|
||||
public float gravity = 20.0f; // 重力
|
||||
public float airControl = 0.3f; // 空中控制力
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.1.2 动作时间参数
|
||||
```csharp
|
||||
public class CharacterTimingConfig
|
||||
{
|
||||
// 闪避
|
||||
public float dodgeDuration = 0.3f; // 闪避持续时间
|
||||
public float dodgeInvincibleTime = 0.2f; // 无敌时间
|
||||
public float dodgeDistance = 5.0f; // 闪避距离
|
||||
|
||||
// 格挡
|
||||
public float blockDuration = 0.5f; // 格挡持续时间
|
||||
public float perfectBlockWindow = 0.1f; // 完美格挡窗口
|
||||
public float blockAngle = 90.0f; // 格挡角度
|
||||
|
||||
// 攻击
|
||||
public float lightAttackDuration = 0.2f; // 轻攻击时间
|
||||
public float heavyAttackDuration = 0.4f; // 重攻击时间
|
||||
public float attackRecoveryTime = 0.3f; // 攻击后摇
|
||||
}
|
||||
```
|
||||
|
||||
### 1.2 动作动画原则
|
||||
|
||||
#### 1.2.1 动画分层
|
||||
```
|
||||
底层(Base Layer): 基础移动(站立、行走、奔跑)
|
||||
↓
|
||||
中层(Mid Layer): 上半身动作(攻击、格挡、交互)
|
||||
↓
|
||||
顶层(Top Layer): 特殊动作(受击、特殊技能)
|
||||
```
|
||||
|
||||
#### 1.2.2 动画混合原则
|
||||
1. **优先级明确**: 攻击 > 防御 > 移动
|
||||
2. **过渡平滑**: 使用混合树避免动作跳变
|
||||
3. **层级隔离**: 不同层级动画互不干扰
|
||||
4. **符合物理**: 动画应该符合人体运动规律
|
||||
|
||||
---
|
||||
|
||||
## 二、Camera(摄像机)设计原则
|
||||
|
||||
### 2.1 第三人称视角参数
|
||||
|
||||
#### 2.1.1 基础参数
|
||||
```csharp
|
||||
public class ThirdPersonCameraConfig
|
||||
{
|
||||
// 位置参数
|
||||
public float distance = 8.0f; // 距离
|
||||
public float height = 3.0f; // 高度
|
||||
public float horizontalOffset = 0.5f; // 水平偏移
|
||||
public float verticalOffset = 1.5f; // 垂直偏移
|
||||
|
||||
// 角度参数
|
||||
public float minPitch = -30.0f; // 最小仰角
|
||||
public float maxPitch = 60.0f; // 最大俯角
|
||||
public float rotationSpeed = 3.0f; // 旋转速度
|
||||
|
||||
// FOV
|
||||
public float normalFOV = 50.0f; // 正常视野
|
||||
public float sprintFOV = 60.0f; // 冲刺视野
|
||||
public float aimFOV = 35.0f; // 瞄准视野
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.1.2 视角距离分段
|
||||
```
|
||||
极近距离(Close Range): 3-5 单位
|
||||
├── 适用场景: 潜行、近战
|
||||
└── 优点: 强调紧张感
|
||||
|
||||
标准距离(Normal Range): 6-8 单位
|
||||
├── 适用场景: 普通战斗、探索
|
||||
└── 优点: 平衡视野和代入感
|
||||
|
||||
远距离(Far Range): 10-15 单位
|
||||
├── 适用场景: 观察环境、远程战斗
|
||||
└── 优点: 最大视野
|
||||
|
||||
战术距离(Tactical Range): 15-25 单位
|
||||
├── 适用场景: 战术规划、大战场
|
||||
└── 优点: 战略视角
|
||||
```
|
||||
|
||||
### 2.2 摄像机跟随系统
|
||||
|
||||
#### 2.2.1 位置跟随
|
||||
```csharp
|
||||
public class CameraFollowSettings
|
||||
{
|
||||
// 位置平滑
|
||||
public bool usePositionSmoothing = true;
|
||||
public float positionSmoothSpeed = 5.0f; // 位置平滑速度
|
||||
public float positionDeadzone = 0.1f; // 位置死区
|
||||
|
||||
// 碰撞
|
||||
public bool enableCollision = true;
|
||||
public float collisionRadius = 0.3f; // 碰撞半径
|
||||
public LayerMask collisionLayers; // 碰撞层
|
||||
|
||||
// 躲避
|
||||
public bool enableDodge = true;
|
||||
public float dodgeSpeed = 10.0f; // 躲避速度
|
||||
public float returnSpeed = 3.0f; // 返回速度
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2.2 旋转跟随
|
||||
```csharp
|
||||
public class CameraRotationSettings
|
||||
{
|
||||
// 旋转平滑
|
||||
public bool useRotationSmoothing = true;
|
||||
public float rotationSmoothSpeed = 8.0f; // 旋转平滑速度
|
||||
|
||||
// 角度限制
|
||||
public bool limitVerticalAngle = true;
|
||||
public float minPitch = -30.0f; // 最小俯仰角
|
||||
public float maxPitch = 60.0f; // 最大俯仰角
|
||||
|
||||
// 自动校准
|
||||
public bool enableAutoRecenter = true;
|
||||
public float recenterDelay = 1.5f; // 校准延迟
|
||||
public float recenterSpeed = 5.0f; // 校准速度
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 摄像机震动系统
|
||||
|
||||
#### 2.3.1 震动类型
|
||||
```
|
||||
┌─────────────────────────────────────────────────────┐
|
||||
│ 震动类型矩阵 │
|
||||
├──────────────┬──────────────┬──────────────────────┤
|
||||
│ 类型 │ 频率 │ 用途 │
|
||||
├──────────────┼──────────────┼──────────────────────┤
|
||||
│ 手持震动 │ 高频(10-30Hz)│ 武器后坐力、脚步 │
|
||||
│ 冲击震动 │ 中频(5-15Hz) │ 爆炸、撞击 │
|
||||
│ 慢速震动 │ 低频(1-5Hz) │ 大规模爆炸、地震 │
|
||||
│ 震动偏移 │ 极低频(<1Hz) │ 角色移动视角晃动 │
|
||||
└──────────────┴──────────────┴──────────────────────┘
|
||||
```
|
||||
|
||||
#### 2.3.2 震动参数配置
|
||||
```csharp
|
||||
public class CameraShakeConfig
|
||||
{
|
||||
// 基础震动
|
||||
public float shakeDuration = 0.2f; // 震动持续时间
|
||||
public float shakeIntensity = 1.0f; // 震动强度
|
||||
|
||||
// 旋转震动
|
||||
public Vector3 rotationShake = new Vector3(1f, 1f, 0.5f);
|
||||
|
||||
// 位移震动
|
||||
public Vector3 positionShake = new Vector3(0.5f, 0.3f, 0.2f);
|
||||
|
||||
// 衰减曲线
|
||||
public AnimationCurve shakeCurve;
|
||||
}
|
||||
|
||||
// 震动预设
|
||||
public class CameraShakePresets
|
||||
{
|
||||
public static CameraShakeConfig LightHit => new CameraShakeConfig
|
||||
{
|
||||
shakeDuration = 0.1f,
|
||||
shakeIntensity = 0.3f,
|
||||
rotationShake = new Vector3(2f, 1f, 0.5f)
|
||||
};
|
||||
|
||||
public static CameraShakeConfig HeavyHit => new CameraShakeConfig
|
||||
{
|
||||
shakeDuration = 0.3f,
|
||||
shakeIntensity = 1.0f,
|
||||
rotationShake = new Vector3(5f, 3f, 2f)
|
||||
};
|
||||
|
||||
public static CameraShakeConfig Explosion => new CameraShakeConfig
|
||||
{
|
||||
shakeDuration = 0.5f,
|
||||
shakeIntensity = 2.0f,
|
||||
rotationShake = new Vector3(8f, 5f, 3f)
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### 2.4 特殊视角模式
|
||||
|
||||
#### 2.4.1 锁定目标视角
|
||||
```
|
||||
锁定目标相机 (Lock-On Camera)
|
||||
├── 特点: 主角朝向敌人,相机跟随敌人
|
||||
├── 优点: 便于观察敌人动作
|
||||
├── 适用: 近战动作游戏、Boss战
|
||||
└── 实现:
|
||||
├── 相机看向目标
|
||||
├── 主角自动转向目标
|
||||
└── 保留闪避时的相机跟随
|
||||
```
|
||||
|
||||
#### 2.4.2 自由视角
|
||||
```
|
||||
自由视角相机 (Free Look Camera)
|
||||
├── 特点: 相机独立于主角方向
|
||||
├── 优点: 灵活观察周围环境
|
||||
├── 适用: 探索、潜行、观察
|
||||
└── 实现:
|
||||
├── 相机与主角方向分离
|
||||
├── 支持360度旋转
|
||||
└── 主角朝向跟随移动方向
|
||||
```
|
||||
|
||||
#### 2.4.3 电影视角
|
||||
```
|
||||
电影相机 (Cinematic Camera)
|
||||
├── 特点: 预设相机路径,自动播放
|
||||
├── 优点: 增强演出效果
|
||||
├── 适用: 过场动画、Boss登场、技能特写
|
||||
└── 实现:
|
||||
├── 路径关键帧
|
||||
├── 焦点跟随
|
||||
└── 景深变化
|
||||
```
|
||||
|
||||
### 2.5 摄像机FOV系统
|
||||
|
||||
#### 2.5.1 FOV动态调整
|
||||
```csharp
|
||||
public class FOVSettings
|
||||
{
|
||||
// 基础FOV
|
||||
public float baseFOV = 50.0f;
|
||||
|
||||
// 速度感FOV
|
||||
public float sprintFOV = 60.0f;
|
||||
public float sprintFOVSpeed = 8.0f;
|
||||
|
||||
// 瞄准FOV
|
||||
public float aimFOV = 35.0f;
|
||||
public float aimFOVSpeed = 10.0f;
|
||||
|
||||
// 特殊技能FOV
|
||||
public float ultimateFOV = 70.0f;
|
||||
public float ultimateFOVSpeed = 5.0f;
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.5.2 FOV调整时机
|
||||
```
|
||||
时机 FOV变化 速度
|
||||
───────────────────────────────────────────
|
||||
正常移动 50° -
|
||||
奔跑加速 50° → 60° 快速(0.3s)
|
||||
全力冲刺 60° → 70° 中速(0.5s)
|
||||
瞄准 50° → 35° 快速(0.2s)
|
||||
释放大招 50° → 70° 慢速(0.8s)
|
||||
受到重伤 轻微震动 即时
|
||||
```
|
||||
|
||||
### 2.6 遮挡处理系统
|
||||
|
||||
#### 2.6.1 遮挡类型
|
||||
```
|
||||
1. 透明化处理 (Fade)
|
||||
└── 遮挡物渐变透明,保持视野
|
||||
|
||||
2. 相机躲避 (Dodge)
|
||||
└── 相机自动移动到安全位置
|
||||
|
||||
3. 快速推近 (Push In)
|
||||
└── 相机快速推向角色,减少遮挡
|
||||
|
||||
4. 目标穿透 (Through)
|
||||
└── 相机看向目标时穿透遮挡物
|
||||
```
|
||||
|
||||
#### 2.6.2 透明化参数
|
||||
```csharp
|
||||
public class OcclusionFadeConfig
|
||||
{
|
||||
// 触发条件
|
||||
public float fadeStartDistance = 1.0f; // 开始距离
|
||||
public float fadeEndDistance = 3.0f; // 结束距离
|
||||
|
||||
// 透明效果
|
||||
public float fadeTargetAlpha = 0.3f; // 目标透明度
|
||||
public float fadeSpeed = 8.0f; // 淡出速度
|
||||
public float recoveryDelay = 0.2f; // 恢复延迟
|
||||
public float recoverySpeed = 3.0f; // 恢复速度
|
||||
|
||||
// 检测射线
|
||||
public int rayCount = 5; // 射线数量
|
||||
public float rayRadius = 0.2f; // 球形检测半径
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、Control(操控)设计原则
|
||||
|
||||
### 3.1 输入设计
|
||||
|
||||
#### 3.1.1 输入映射
|
||||
```csharp
|
||||
public class InputMapping
|
||||
{
|
||||
// 移动
|
||||
public InputAction moveAction; // WASD/摇杆移动
|
||||
|
||||
// 视角
|
||||
public InputAction lookAction; // 鼠标/右摇杆视角
|
||||
|
||||
// 动作
|
||||
public InputAction jumpAction; // 跳跃 (Space)
|
||||
public InputAction sprintAction; // 冲刺 (Shift)
|
||||
public InputAction dodgeAction; // 闪避 (Ctrl/V)
|
||||
|
||||
// 战斗
|
||||
public InputAction attackAction; // 攻击 (LMB/Trigger)
|
||||
public InputAction heavyAttackAction; // 重攻击 (RMB/R2)
|
||||
public InputAction blockAction; // 格挡 (Hold RMB/R2)
|
||||
|
||||
// 武器
|
||||
public InputAction weaponSwitchAction; // 武器切换 (Q/E)
|
||||
public InputAction skillAction1; // 技能1 (1)
|
||||
public InputAction skillAction2; // 技能2 (2)
|
||||
|
||||
// 系统
|
||||
public InputAction pauseAction; // 暂停 (Esc)
|
||||
public InputAction lockOnAction; // 锁定 (Tab)
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.1.2 输入响应时间
|
||||
```
|
||||
输入 → 响应 时间表
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
移动 0-16ms 即时响应
|
||||
视角旋转 0-16ms 即时响应
|
||||
跳跃 16-33ms 1帧延迟
|
||||
闪避 33-50ms 2-3帧延迟
|
||||
攻击 33-66ms 2-4帧延迟
|
||||
格挡 33-50ms 2-3帧延迟
|
||||
技能 50-100ms 3-6帧延迟
|
||||
```
|
||||
|
||||
### 3.2 输入缓冲系统
|
||||
|
||||
#### 3.2.1 缓冲机制
|
||||
```csharp
|
||||
public class InputBufferConfig
|
||||
{
|
||||
// 缓冲时间
|
||||
public float attackBufferTime = 0.15f; // 攻击缓冲时间
|
||||
public float dodgeBufferTime = 0.2f; // 闪避缓冲时间
|
||||
public float jumpBufferTime = 0.1f; // 跳跃缓冲时间
|
||||
|
||||
// 优先级
|
||||
public bool enablePriority = true;
|
||||
public InputPriority priorityOrder = InputPriority.Dodge > InputPriority.Jump > InputPriority.Attack;
|
||||
}
|
||||
|
||||
public enum InputPriority
|
||||
{
|
||||
Dodge, // 最高优先级
|
||||
Jump,
|
||||
Attack,
|
||||
Block,
|
||||
Move // 最低优先级
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2.2 缓冲执行逻辑
|
||||
```
|
||||
玩家输入 → 存入缓冲区 → 按优先级执行
|
||||
↓
|
||||
当前动作可被打断?
|
||||
↓ 是
|
||||
检测缓冲输入 → 匹配成功 → 执行缓冲动作
|
||||
↓ 否
|
||||
继续当前动作 → 动作结束 → 清空缓冲区
|
||||
```
|
||||
|
||||
### 3.3 预输入系统
|
||||
|
||||
#### 3.3.1 预输入原理
|
||||
```csharp
|
||||
public class PreinputConfig
|
||||
{
|
||||
// 预输入窗口
|
||||
public float preinputWindow = 0.1f; // 动作结束前多久可以输入
|
||||
|
||||
// 预输入验证
|
||||
public bool requireDirectionMatch = true; // 是否要求方向匹配
|
||||
public float directionThreshold = 0.8f; // 方向相似度阈值
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.3.2 预输入示例
|
||||
```
|
||||
场景: 玩家刚结束一个攻击动作
|
||||
|
||||
时机1: 攻击结束前 0.1s 按下闪避
|
||||
结果: 立即执行闪避,无缝衔接
|
||||
|
||||
时机2: 攻击结束前 0.2s 按下闪避
|
||||
结果: 忽略(超出预输入窗口)
|
||||
|
||||
时机3: 攻击结束后 0.1s 按下闪避
|
||||
结果: 正常执行闪避(普通输入)
|
||||
```
|
||||
|
||||
### 3.4 输入辅助系统
|
||||
|
||||
#### 3.4.1 方向修正
|
||||
```csharp
|
||||
public class InputAssistConfig
|
||||
{
|
||||
// 自动锁定
|
||||
public bool enableAutoLock = false;
|
||||
public float autoLockAngle = 30.0f; // 自动锁定角度
|
||||
public float autoLockRange = 5.0f; // 自动锁定距离
|
||||
|
||||
// 方向吸附
|
||||
public bool enableDirectionSnapping = true;
|
||||
public float snapAngle = 45.0f; // 吸附角度
|
||||
public float snapDeadzone = 0.5f; // 吸附死区
|
||||
|
||||
// 目标吸附
|
||||
public bool enableTargetSnapping = true;
|
||||
public float targetSnapAngle = 60.0f; // 目标吸附角度
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.4.2 友好度设置
|
||||
```
|
||||
辅助等级 自动锁定 方向吸附 目标吸附 瞄准辅助
|
||||
────────────────────────────────────────────────────────
|
||||
新手 ✓ ✓ ✓ ✓
|
||||
普通 ✓ ✓ ✗ ✓
|
||||
老手 ✗ ✗ ✗ ✗
|
||||
硬核 ✗ ✗ ✗ ✗
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、3C协调设计
|
||||
|
||||
### 4.1 移动与相机协调
|
||||
|
||||
#### 4.1.1 移动时相机行为
|
||||
```
|
||||
移动类型 相机行为
|
||||
─────────────────────────────────────────
|
||||
静止站立 缓慢恢复居中
|
||||
缓慢行走 平滑跟随
|
||||
正常奔跑 快速跟随 + FOV增加
|
||||
冲刺 快速跟随 + 大FOV + 震动
|
||||
闪避/后撤 特殊跟随路径
|
||||
跳跃 垂直跟随 + 轻微下压
|
||||
```
|
||||
|
||||
#### 4.1.2 相机过渡时机
|
||||
```csharp
|
||||
public class CameraTransitionSettings
|
||||
{
|
||||
// 移动类型切换
|
||||
public float walkToRunThreshold = 5.0f; // 行走→奔跑阈值
|
||||
public float runToSprintThreshold = 8.0f; // 奔跑→冲刺阈值
|
||||
|
||||
// FOV过渡
|
||||
public float fovTransitionSpeed = 5.0f; // FOV变化速度
|
||||
|
||||
// 距离过渡
|
||||
public float distanceTransitionSpeed = 3.0f; // 距离变化速度
|
||||
|
||||
// 角色旋转过渡
|
||||
public float characterRotationDelay = 0.1f; // 角色旋转延迟
|
||||
}
|
||||
```
|
||||
|
||||
### 4.2 战斗与相机协调
|
||||
|
||||
#### 4.2.1 攻击时相机行为
|
||||
```
|
||||
攻击类型 相机行为
|
||||
───────────────────────────────────────
|
||||
轻攻击 轻微震动 + 快速恢复
|
||||
重攻击 中度震动 + 视角跟随武器
|
||||
技能释放 大震动 + 可能有特写
|
||||
完美格挡/闪避 轻微震动 + 焦点锁定
|
||||
受击 强烈震动 + 屏幕变红
|
||||
```
|
||||
|
||||
#### 4.2.2 锁定系统行为
|
||||
```csharp
|
||||
public class LockOnSettings
|
||||
{
|
||||
// 锁定范围
|
||||
public float maxLockOnDistance = 50.0f; // 最大锁定距离
|
||||
public float lockOnAngle = 180.0f; // 锁定角度
|
||||
|
||||
// 切换
|
||||
public bool enableTargetSwitch = true;
|
||||
public float switchCooldown = 0.3f; // 切换冷却
|
||||
public InputAction switchTargetAction; // 切换目标输入
|
||||
|
||||
// 脱离
|
||||
public float autoUnlockDistance = 60.0f; // 自动解锁距离
|
||||
public float unlockIfBehindTime = 2.0f; // 目标在背后多久解锁
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 特殊状态协调
|
||||
|
||||
#### 4.3.1 剧情/过场状态
|
||||
```csharp
|
||||
public class CinematicSettings
|
||||
{
|
||||
// 进入/退出
|
||||
public float fadeInDuration = 0.5f; // 淡入时长
|
||||
public float fadeOutDuration = 0.5f; // 淡出时长
|
||||
|
||||
// 相机控制
|
||||
public bool disablePlayerCamera = true; // 禁用玩家控制相机
|
||||
public bool lockPlayerMovement = true; // 锁定玩家移动
|
||||
|
||||
// UI
|
||||
public bool hideHUD = true; // 隐藏HUD
|
||||
public bool showDialogue = false; // 显示对话
|
||||
}
|
||||
```
|
||||
|
||||
#### 4.3.2 死亡/复活状态
|
||||
```csharp
|
||||
public class DeathCameraSettings
|
||||
{
|
||||
// 死亡相机
|
||||
public float deathCameraHeight = 2.0f; // 相机高度
|
||||
public float deathCameraDistance = 5.0f; // 相机距离
|
||||
public float deathCameraDuration = 2.0f; // 死亡相机持续时间
|
||||
|
||||
// 复活相机
|
||||
public float respawnCameraSpeed = 3.0f; // 复活相机速度
|
||||
public TransitionCurve respawnCurve; // 复活过渡曲线
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、调试工具
|
||||
|
||||
### 5.1 运行时调试显示
|
||||
```csharp
|
||||
public class CameraDebugInfo : MonoBehaviour
|
||||
{
|
||||
public bool showDebugInfo = true;
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
if (!showDebugInfo) return;
|
||||
|
||||
GUILayout.BeginArea(new Rect(10, 10, 400, 300));
|
||||
GUILayout.Label($"Camera Distance: {currentDistance}");
|
||||
GUILayout.Label($"Camera Pitch: {currentPitch}");
|
||||
GUILayout.Label($"Camera Yaw: {currentYaw}");
|
||||
GUILayout.Label($"Current FOV: {currentFOV}");
|
||||
GUILayout.Label($"Camera State: {cameraState}");
|
||||
GUILayout.Label($"Is Locking: {isLocking}");
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 编辑器调试工具
|
||||
```csharp
|
||||
#if UNITY_EDITOR
|
||||
[CustomEditor(typeof(ThirdPersonCameraController))]
|
||||
public class CameraControllerEditor : Editor
|
||||
{
|
||||
void OnSceneGUI()
|
||||
{
|
||||
var controller = target as ThirdPersonCameraController;
|
||||
|
||||
// 绘制相机锥体
|
||||
Handles.color = Color.cyan;
|
||||
Vector3 camPos = controller.transform.position;
|
||||
Vector3 forward = controller.transform.forward * controller.distance;
|
||||
|
||||
Handles.DrawLine(camPos, camPos + forward);
|
||||
Handles.DrawWireDisc(camPos + forward, Vector3.up, controller.fovAtDistance);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
```
|
||||
|
||||
### 5.3 录制回放工具
|
||||
```csharp
|
||||
public class CameraRecorder : MonoBehaviour
|
||||
{
|
||||
public List<CameraFrame> recordedFrames = new List<CameraFrame>();
|
||||
private bool isRecording;
|
||||
|
||||
[Serializable]
|
||||
public struct CameraFrame
|
||||
{
|
||||
public float time;
|
||||
public Vector3 position;
|
||||
public Quaternion rotation;
|
||||
public float fov;
|
||||
}
|
||||
|
||||
public void StartRecording()
|
||||
{
|
||||
recordedFrames.Clear();
|
||||
isRecording = true;
|
||||
}
|
||||
|
||||
public void StopRecording()
|
||||
{
|
||||
isRecording = false;
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
if (isRecording)
|
||||
{
|
||||
recordedFrames.Add(new CameraFrame
|
||||
{
|
||||
time = Time.time,
|
||||
position = transform.position,
|
||||
rotation = transform.rotation,
|
||||
fov = GetComponent<Camera>().fieldOfView
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、优化建议
|
||||
|
||||
### 6.1 性能优化
|
||||
|
||||
#### 6.1.1 摄像机性能
|
||||
```
|
||||
优化项 建议
|
||||
───────────────────────────────────
|
||||
相机更新频率 跟随角色更新(LateUpdate)
|
||||
震动系统 使用对象池,避免GC
|
||||
碰撞检测 使用LayerMask减少检测
|
||||
FOV计算 缓存计算结果
|
||||
距离计算 使用sqrMagnitude代替magnitude
|
||||
```
|
||||
|
||||
#### 6.1.2 输入性能
|
||||
```
|
||||
优化项 建议
|
||||
───────────────────────────────────
|
||||
输入检测 使用事件而非轮询
|
||||
输入缓冲 使用固定大小数组
|
||||
预输入验证 简化验证逻辑
|
||||
辅助计算 必要时才计算
|
||||
```
|
||||
|
||||
### 6.2 内存优化
|
||||
```
|
||||
优化项 建议
|
||||
───────────────────────────────────
|
||||
震动预设 使用Struct而非Class
|
||||
动画曲线 共享常用曲线
|
||||
相机状态 使用Enum而非字符串
|
||||
调试信息 运行时可关闭
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、参考案例
|
||||
|
||||
### 7.1 优秀3C设计游戏
|
||||
1. **Dark Souls系列** - 精准的锁定系统
|
||||
2. **Devil May Cry系列** - 华丽的视角演出
|
||||
3. **God of War** - 优秀的过肩视角
|
||||
4. **The Witcher 3** - 自然的相机跟随
|
||||
5. **Ghost of Tsushima** - 电影化的相机语言
|
||||
|
||||
### 7.2 关键学习点
|
||||
```
|
||||
游戏 学习点
|
||||
─────────────────────────────────────────
|
||||
Dark Souls 锁定系统、精准反馈
|
||||
Devil May Cry 视角演出、特写镜头
|
||||
God of War 过肩视角、战斗相机
|
||||
Witcher 3 探索相机、自然跟随
|
||||
Ghost of Tsushima 电影语言、视觉叙事
|
||||
Bayonetta 闪避特写、Witch Time
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、总结
|
||||
|
||||
### 8.1 3C设计核心原则
|
||||
|
||||
1. **一致性**: 所有系统应该协调一致
|
||||
2. **响应性**: 玩家输入应该得到即时反馈
|
||||
3. **可读性**: 玩家应该能清楚看到游戏状态
|
||||
4. **沉浸感**: 相机应该增强而非干扰体验
|
||||
5. **辅助性**: 应该提供合理的辅助选项
|
||||
|
||||
### 8.2 开发检查清单
|
||||
|
||||
```
|
||||
□ 基础移动流畅
|
||||
□ 视角旋转平滑
|
||||
□ 战斗反馈明确
|
||||
□ 锁定系统稳定
|
||||
□ 遮挡处理自然
|
||||
□ FOV变化合理
|
||||
□ 震动效果适度
|
||||
□ 调试工具完善
|
||||
□ 性能表现良好
|
||||
□ 辅助选项完整
|
||||
```
|
||||
|
||||
### 8.3 常见问题
|
||||
|
||||
```
|
||||
问题 解决方案
|
||||
─────────────────────────────────────────
|
||||
相机抖动 增加平滑度,降低跟随速度
|
||||
视角穿墙 增加碰撞检测,调整躲避速度
|
||||
锁定不稳定 增加目标切换冷却,调整角度阈值
|
||||
输入延迟 检查事件调用顺序,优化计算
|
||||
FOV变化突兀 使用缓动曲线,增加过渡时间
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
416
docs/小型游戏完善计划.md
416
docs/小型游戏完善计划.md
@@ -1,416 +0,0 @@
|
||||
# Cielonos 小型游戏完善计划
|
||||
|
||||
## 一、目标定位
|
||||
|
||||
### 游戏定位
|
||||
将当前Demo完善为一个**流程精悍、体验完整**的Roguelike动作游戏,包含:
|
||||
- **核心循环**: 战斗 → 获得奖励 → 升级强化 → 挑战更强的敌人
|
||||
- **目标**: 完成3-5个精心设计的关卡,体验完整的游戏流程
|
||||
- **时长**: 单次通关约30-45分钟
|
||||
|
||||
### 核心体验
|
||||
1. **爽快的战斗**: 强调动作感和打击反馈
|
||||
2. **策略性Build**: 有限的武器/技能选择,但搭配有深度
|
||||
3. **成长感**: 每次游玩都有明显的进步
|
||||
4. **挑战性**: 难度曲线合理,有成就感
|
||||
|
||||
---
|
||||
|
||||
## 二、游戏流程设计
|
||||
|
||||
### 2.1 章节结构(简化版)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 主菜单 │
|
||||
│ 开始游戏 / 设置 / 退出 │
|
||||
└────────────────┬────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 区域选择界面 │
|
||||
│ [关卡1] [关卡2] [关卡3] [Boss] │
|
||||
│ ✓ 完成 ○ 锁定 ○ 锁定 │
|
||||
└────────────────┬────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────┐
|
||||
│ 战斗场景 │
|
||||
│ │
|
||||
│ 玩家 ←─────────────────→ 敌人 │
|
||||
│ │
|
||||
│ [UI: 生命 | 能量 | 武器技能] │
|
||||
└────────────────┬────────────────────────┘
|
||||
│
|
||||
┌────────┴────────┐
|
||||
▼ ▼
|
||||
┌───────────────┐ ┌───────────────┐
|
||||
│ 胜利 │ │ 失败 │
|
||||
│ 奖励选择 │ │ 重新开始 │
|
||||
└───────────────┘ └───────────────┘
|
||||
```
|
||||
|
||||
### 2.2 关卡设计
|
||||
|
||||
#### 关卡1: 新手教学(可选跳过)
|
||||
- **目标**: 熟悉基本操作
|
||||
- **敌人**: 1-2种基础敌人
|
||||
- **奖励**: 无需选择
|
||||
|
||||
#### 关卡2: 基础战斗
|
||||
- **目标**: 学习闪避和格挡
|
||||
- **敌人**: 3-4种敌人混合
|
||||
- **奖励**: 选择1个被动技能
|
||||
|
||||
#### 关卡3: 精英挑战
|
||||
- **目标**: 考验连招和反应
|
||||
- **敌人**: 精英敌人 + 小怪
|
||||
- **奖励**: 选择1个武器强化 或 1个被动技能
|
||||
|
||||
#### Boss关: 机械心脏
|
||||
- **目标**: 综合考验所有技巧
|
||||
- **敌人**: 1个精心设计的Boss
|
||||
- **胜利奖励**: 通关结算
|
||||
|
||||
---
|
||||
|
||||
## 三、核心系统实现计划
|
||||
|
||||
### 3.1 第一阶段:完善战斗系统(优先级P0)
|
||||
|
||||
#### 3.1.1 完善玩家操作
|
||||
**需要实现**:
|
||||
- [ ] 基础移动(走、跑、跳跃)
|
||||
- [ ] 基础攻击(轻攻击、重攻击)
|
||||
- [ ] 闪避系统(无敌帧)
|
||||
- [ ] 格挡系统(完美格挡)
|
||||
- [ ] 武器切换
|
||||
- [ ] 输入缓冲优化
|
||||
|
||||
**当前状态**: 部分实现,需要完善
|
||||
|
||||
#### 3.1.2 完善打击反馈
|
||||
**需要实现**:
|
||||
- [ ] 击中停顿(Hitstop)
|
||||
- [ ] 屏幕震动(ScreenShake)
|
||||
- [ ] 动作延迟(Hitlag)
|
||||
- [ ] 伤害数字显示优化
|
||||
- [ ] 特效触发时机
|
||||
- [ ] 音效配合
|
||||
|
||||
#### 3.1.3 完善格挡系统
|
||||
**需要实现**:
|
||||
- [ ] 普通格挡(减伤)
|
||||
- [ ] 完美格挡(完美时机,无伤+反击机会)
|
||||
- [ ] 格挡动画和特效
|
||||
- [ ] 格挡消耗(能量)
|
||||
- [ ] 格挡打断机制
|
||||
|
||||
### 3.2 第二阶段:完善武器系统(优先级P0)
|
||||
|
||||
#### 3.2.1 完善Polychrome武器
|
||||
**需要实现**:
|
||||
- [ ] 完成所有连招分支
|
||||
- [ ] 架势切换机制
|
||||
- [ ] 特殊攻击(Air Attack)
|
||||
- [ ] 武器VFX完整实现
|
||||
- [ ] 音效配合
|
||||
|
||||
#### 3.2.2 开发第二把武器
|
||||
**建议**: 设计一把差异化的武器
|
||||
- **武器类型**: 双刃 / 法杖 / 拳套
|
||||
- **战斗风格**: 速攻型 / 蓄力型 / 召唤型
|
||||
|
||||
#### 3.2.3 武器成长系统
|
||||
**需要实现**:
|
||||
- [ ] 武器等级提升
|
||||
- [ ] 武器技能解锁
|
||||
- [ ] 武器强化选项
|
||||
|
||||
### 3.3 第三阶段:完善敌人AI(优先级P0)
|
||||
|
||||
#### 3.3.1 完善LegionCenturion(百夫长)
|
||||
**需要实现**:
|
||||
- [ ] 完整的攻击模式
|
||||
- [ ] AI行为树完善
|
||||
- [ ] 巡逻状态
|
||||
- [ ] 追击状态
|
||||
- [ ] 攻击状态
|
||||
- [ ] 撤退状态
|
||||
- [ ] 特殊攻击触发
|
||||
- [ ] 死亡动画和效果
|
||||
|
||||
#### 3.3.2 开发新敌人
|
||||
**需要开发**:
|
||||
- [ ] **Scout(侦察兵)**: 快速、远程攻击
|
||||
- [ ] **Heavy(重装兵)**: 缓慢但强力
|
||||
- [ ] **Boss: Nexus Core(核心枢纽)**: 多阶段Boss
|
||||
|
||||
#### 3.3.3 敌人生成系统
|
||||
**需要实现**:
|
||||
- [ ] 波次生成配置
|
||||
- [ ] 敌人类型组合
|
||||
- [ ] 生成位置控制
|
||||
- [ ] 难度缩放
|
||||
|
||||
### 3.4 第四阶段:完善奖励系统(优先级P1)
|
||||
|
||||
#### 3.4.1 被动技能系统
|
||||
**需要实现**:
|
||||
- [ ] 技能数据库
|
||||
- [ ] 技能效果实现
|
||||
- [ ] 技能图标和描述
|
||||
- [ ] 技能选择UI
|
||||
|
||||
**示例技能**:
|
||||
```
|
||||
1. 生命汲取: 攻击时恢复生命
|
||||
2. 铁壁: 格挡减伤+20%
|
||||
3. 疾风: 移动速度+15%
|
||||
4. 暴击强化: 暴击伤害+25%
|
||||
5. 能量涌动: 能量恢复+20%
|
||||
```
|
||||
|
||||
#### 3.4.2 奖励选择UI
|
||||
**需要实现**:
|
||||
- [ ] 奖励卡牌显示
|
||||
- [ ] 鼠标悬停显示详情
|
||||
- [ ] 确认选择
|
||||
- [ ] 动画过渡
|
||||
|
||||
### 3.5 第五阶段:完善UI系统(优先级P1)
|
||||
|
||||
#### 3.5.1 HUD界面
|
||||
**需要完善**:
|
||||
- [ ] 生命值条(带动画)
|
||||
- [ ] 能量条(带动画)
|
||||
- [ ] 武器技能图标
|
||||
- [ ] 状态效果图标
|
||||
- [ ] 小型地图(可选)
|
||||
|
||||
#### 3.5.2 暂停菜单
|
||||
**需要实现**:
|
||||
- [ ] 暂停/继续
|
||||
- [ ] 重新开始
|
||||
- [ ] 返回主菜单
|
||||
- [ ] 音效/画质设置
|
||||
|
||||
#### 3.5.3 主菜单
|
||||
**需要实现**:
|
||||
- [ ] 开始游戏按钮
|
||||
- [ ] 设置按钮
|
||||
- [ ] 退出按钮
|
||||
- [ ] Logo和背景
|
||||
|
||||
#### 3.5.4 结算界面
|
||||
**需要实现**:
|
||||
- [ ] 通关时间显示
|
||||
- [ ] 击杀统计
|
||||
- [ ] 获得奖励预览
|
||||
- [ ] 再次挑战按钮
|
||||
|
||||
### 3.6 第六阶段:完善场景和关卡(优先级P1)
|
||||
|
||||
#### 3.6.1 场景设计
|
||||
**需要实现**:
|
||||
- [ ] 场景1: 废弃工厂(教学)
|
||||
- [ ] 场景2: 城市废墟(基础战斗)
|
||||
- [ ] 场景3: 研究所(精英挑战)
|
||||
- [ ] 场景4: Boss战场
|
||||
|
||||
#### 3.6.2 场景过渡
|
||||
**需要实现**:
|
||||
- [ ] 场景淡入淡出
|
||||
- [ ] 玩家传送
|
||||
- [ ] 敌人清理
|
||||
|
||||
#### 3.6.3 环境交互
|
||||
**可选实现**:
|
||||
- [ ] 可破坏物体
|
||||
- [ ] 危险区域
|
||||
- [ ] 掩体系统
|
||||
|
||||
---
|
||||
|
||||
## 四、内容制作清单
|
||||
|
||||
### 4.1 敌人配置清单
|
||||
|
||||
| 敌人名称 | 类型 | 难度 | 特殊能力 | 所需资源 |
|
||||
|---------|------|------|----------|---------|
|
||||
| Scout | 远程 | 易 | 射击、翻滚 | 动画/模型 |
|
||||
| LegionCenturion | 近战 | 中 | 格挡、冲锋 | 已有 |
|
||||
| Heavy | 重装 | 中 | 践踏、投掷 | 动画/模型 |
|
||||
| Drone | 小型 | 易 | 自爆 | 简化模型 |
|
||||
| Nexus Core | Boss | 难 | 多阶段 | 新制作 |
|
||||
|
||||
### 4.2 武器配置清单
|
||||
|
||||
| 武器名称 | 风格 | 攻击方式 | 连招数量 | 状态 |
|
||||
|---------|------|----------|----------|------|
|
||||
| Polychrome | 剑士 | 斩击 | 8+ | 部分完成 |
|
||||
| 双刃 | 速攻 | 连续斩击 | 6 | 待开发 |
|
||||
| FutureWand | 法术 | 射击 | 4 | 待完善 |
|
||||
|
||||
### 4.3 技能配置清单
|
||||
|
||||
| 技能名称 | 类型 | 效果 | 稀有度 |
|
||||
|---------|------|------|--------|
|
||||
| 生命汲取 | 被动 | 攻击回复5%伤害的生命 | 普通 |
|
||||
| 铁壁 | 被动 | 格挡减伤+20% | 普通 |
|
||||
| 疾风腿 | 被动 | 移动速度+15% | 普通 |
|
||||
| 暴击精通 | 被动 | 暴击伤害+25% | 稀有 |
|
||||
| 能量涌动 | 被动 | 能量恢复+20% | 普通 |
|
||||
| 荆棘护甲 | 被动 | 反弹10%伤害 | 稀有 |
|
||||
|
||||
### 4.4 特效清单
|
||||
|
||||
| 特效类型 | 数量 | 优先级 |
|
||||
|---------|------|--------|
|
||||
| 攻击命中 | 4-6 | P0 |
|
||||
| 格挡 | 2-3 | P0 |
|
||||
| 闪避 | 2 | P1 |
|
||||
| Buff/Debuff | 6-8 | P1 |
|
||||
| 死亡 | 3 | P1 |
|
||||
| 环境 | 3-5 | P2 |
|
||||
|
||||
---
|
||||
|
||||
## 五、技术实现优先级
|
||||
|
||||
### 阶段一:核心体验(1-2周)
|
||||
1. 完善玩家操作手感
|
||||
2. 完善打击反馈
|
||||
3. 完善Polychrome武器
|
||||
4. 完善1-2个敌人AI
|
||||
|
||||
### 阶段二:完整内容(2-3周)
|
||||
1. 开发第二把武器
|
||||
2. 开发3-5种敌人
|
||||
3. 开发Boss战
|
||||
4. 开发被动技能系统
|
||||
|
||||
### 阶段三:游戏体验(1-2周)
|
||||
1. 开发UI系统
|
||||
2. 开发关卡流程
|
||||
3. 开发奖励选择
|
||||
4. 完善场景
|
||||
|
||||
### 阶段四:打磨优化(1周)
|
||||
1. 平衡性调整
|
||||
2. Bug修复
|
||||
3. 性能优化
|
||||
4. 测试反馈
|
||||
|
||||
---
|
||||
|
||||
## 六、关键里程碑
|
||||
|
||||
### M1: 可玩Demo(2周)
|
||||
**目标**: 完成基础战斗循环
|
||||
- ✅ 玩家可以完整操作
|
||||
- ✅ 至少1把武器可用
|
||||
- ✅ 至少2种敌人
|
||||
- ✅ 基本的打击反馈
|
||||
- ✅ 简单的UI
|
||||
|
||||
### M2: 核心完成(4周)
|
||||
**目标**: 完成核心游戏循环
|
||||
- ✅ 3个关卡
|
||||
- ✅ 4-5种敌人
|
||||
- ✅ 2把武器
|
||||
- ✅ 被动技能系统
|
||||
- ✅ 基本的UI和菜单
|
||||
|
||||
### M3: Alpha版本(6周)
|
||||
**目标**: 功能完整的游戏
|
||||
- ✅ 完整的游戏流程
|
||||
- ✅ Boss战
|
||||
- ✅ 奖励系统
|
||||
- ✅ 存档系统
|
||||
- ✅ 基本音效和音乐
|
||||
|
||||
### M4: 正式发布(8周)
|
||||
**目标**: 打磨完成
|
||||
- ✅ 所有内容完善
|
||||
- ✅ 平衡性调整
|
||||
- ✅ 性能优化
|
||||
- ✅ Bug修复
|
||||
- ✅ 测试完成
|
||||
|
||||
---
|
||||
|
||||
## 七、开发建议
|
||||
|
||||
### 7.1 聚焦核心
|
||||
- 先完成**核心战斗体验**,其他都可以后续添加
|
||||
- 每次迭代聚焦一个系统,不要同时做太多
|
||||
|
||||
### 7.2 玩家反馈
|
||||
- 尽早让其他人测试
|
||||
- 根据反馈调整手感
|
||||
- 收集具体的问题和改进建议
|
||||
|
||||
### 7.3 技术债务
|
||||
- 在时间允许的情况下,重构而非凑合
|
||||
- 好的架构可以加速后续开发
|
||||
- 记录需要改进的地方
|
||||
|
||||
### 7.4 内容优先级
|
||||
1. **必须**: 核心战斗流畅、敌人有挑战性、有成就感
|
||||
2. **重要**: UI清晰、有成长系统、Boss战精彩
|
||||
3. **可选**: 复杂机制、随机事件、多结局
|
||||
|
||||
### 7.5 质量控制
|
||||
- 每个功能完成后测试
|
||||
- 保持代码整洁
|
||||
- 及时修复Bug
|
||||
- 注意性能表现
|
||||
|
||||
---
|
||||
|
||||
## 八、风险与应对
|
||||
|
||||
### 风险1: 范围蔓延
|
||||
**问题**: 不断添加新内容,无法完成
|
||||
**应对**:
|
||||
- 严格控制范围
|
||||
- 使用优先级矩阵
|
||||
- 每个里程碑结束后重新评估
|
||||
|
||||
### 风险2: 技术难题
|
||||
**问题**: 某些系统实现困难
|
||||
**应对**:
|
||||
- 预留时间缓冲
|
||||
- 提前研究关键技术
|
||||
- 必要时简化方案
|
||||
|
||||
### 风险3: 玩家反馈不佳
|
||||
**问题**: 核心体验不够有趣
|
||||
**应对**:
|
||||
- 尽早测试
|
||||
- 关注核心循环
|
||||
- 快速迭代
|
||||
|
||||
---
|
||||
|
||||
## 九、总结
|
||||
|
||||
将Demo完善为小型游戏的关键在于:
|
||||
|
||||
1. **明确范围**: 聚焦核心战斗体验,不贪多
|
||||
2. **分阶段**: 按优先级逐步实现
|
||||
3. **快速迭代**: 根据反馈及时调整
|
||||
4. **质量优先**: 核心体验要打磨到位
|
||||
|
||||
建议的开发顺序:
|
||||
```
|
||||
核心战斗 → 武器系统 → 敌人AI → 技能系统 → UI/菜单 → 关卡流程 → Boss战 → 打磨优化
|
||||
```
|
||||
|
||||
保持每次迭代都有**可玩的产出**,而不是长时间闭门造车后再展示。
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
670
docs/架构改进建议.md
670
docs/架构改进建议.md
@@ -1,670 +0,0 @@
|
||||
# Cielonos 项目架构改进建议
|
||||
|
||||
## 一、整体架构评估
|
||||
|
||||
### 当前架构优势
|
||||
1. **模块化设计**: Submodule/Subcontroller架构将逻辑和表现分离,提供了良好的可扩展性
|
||||
2. **组件化思想**: 大量使用字典存储子模块,便于动态增删功能
|
||||
3. **事件驱动**: 使用UniRx实现响应式事件系统,解耦了系统间的依赖
|
||||
4. **系统完整性**: 战斗、Buff、状态、动画等核心系统已经具备完整的基础架构
|
||||
|
||||
### 当前架构不足
|
||||
1. **职责边界模糊**: 部分类承担了过多职责
|
||||
2. **代码组织混乱**: 部分脚本放置位置不合理
|
||||
3. **抽象程度不足**: 部分核心逻辑缺少接口抽象
|
||||
4. **文档注释缺失**: 代码缺少必要的注释和说明
|
||||
5. **配置化程度低**: 硬编码问题较多
|
||||
|
||||
---
|
||||
|
||||
## 二、具体改进建议
|
||||
|
||||
### 1. 核心架构层
|
||||
|
||||
#### 1.1 建立核心接口层
|
||||
**问题**: 当前系统之间直接依赖具体实现,缺乏抽象层
|
||||
|
||||
**建议**:
|
||||
```
|
||||
Core/Interfaces/
|
||||
├── ICharacter.cs # 角色接口
|
||||
├── IAttackable.cs # 可攻击对象接口
|
||||
├── IBuffable.cs # 可附魔Buff对象接口
|
||||
├── IItem.cs # 物品接口
|
||||
├── IWeapon.cs # 武器接口
|
||||
├── IDamageable.cs # 可受伤害对象接口
|
||||
└── ITeamMember.cs # 阵营成员接口
|
||||
```
|
||||
|
||||
**示例代码**:
|
||||
```csharp
|
||||
public interface ICharacter
|
||||
{
|
||||
Fraction Team { get; }
|
||||
bool IsDead { get; }
|
||||
float Health { get; }
|
||||
float MaxHealth { get; }
|
||||
|
||||
void TakeDamage(DamageInfo damageInfo);
|
||||
void ApplyBuff(IBuff buff);
|
||||
void Heal(float amount);
|
||||
}
|
||||
|
||||
public interface IDamageSource
|
||||
{
|
||||
DamageInfo CreateDamage();
|
||||
AttackType DamageType { get; }
|
||||
float DamageValue { get; }
|
||||
}
|
||||
```
|
||||
|
||||
#### 1.2 引入服务定位器模式
|
||||
**问题**: Manager类直接持有引用,系统间耦合度高
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
public static class GameServices
|
||||
{
|
||||
private static readonly Dictionary<Type, object> services = new Dictionary<Type, object>();
|
||||
|
||||
public static void Register<T>(T service) where T : class
|
||||
{
|
||||
services[typeof(T)] = service;
|
||||
}
|
||||
|
||||
public static T Get<T>() where T : class
|
||||
{
|
||||
if (services.TryGetValue(typeof(T), out var service))
|
||||
{
|
||||
return service as T;
|
||||
}
|
||||
|
||||
Debug.LogError($"Service {typeof(T)} not found!");
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void Clear()
|
||||
{
|
||||
services.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
// 使用示例
|
||||
public class BattleManager : MonoBehaviour
|
||||
{
|
||||
public void Initialize()
|
||||
{
|
||||
GameServices.Register<IBattleService>(this);
|
||||
GameServices.Register<ICharacterService>(new CharacterService());
|
||||
GameServices.Register<IBuffService>(new BuffService());
|
||||
}
|
||||
}
|
||||
|
||||
// 在其他类中使用
|
||||
var battleService = GameServices.Get<IBattleService>();
|
||||
```
|
||||
|
||||
#### 1.3 建立消息总线系统
|
||||
**问题**: 当前事件系统分散在各个类中,难以追踪和调试
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
public enum GameEvent
|
||||
{
|
||||
// 角色事件
|
||||
CharacterDied,
|
||||
CharacterSpawned,
|
||||
CharacterRevived,
|
||||
|
||||
// 战斗事件
|
||||
DamageDealt,
|
||||
DamageTaken,
|
||||
AttackBlocked,
|
||||
AttackDodged,
|
||||
CriticalHit,
|
||||
|
||||
// 物品事件
|
||||
ItemAcquired,
|
||||
ItemUsed,
|
||||
ItemDiscarded,
|
||||
WeaponSwitched,
|
||||
|
||||
// Buff事件
|
||||
BuffApplied,
|
||||
BuffRemoved,
|
||||
BuffExpired,
|
||||
|
||||
// 游戏状态事件
|
||||
WaveStarted,
|
||||
WaveCleared,
|
||||
BossAppeared,
|
||||
BossDefeated,
|
||||
|
||||
// 系统事件
|
||||
GamePaused,
|
||||
GameResumed,
|
||||
CheckpointReached
|
||||
}
|
||||
|
||||
public class GameEventBus
|
||||
{
|
||||
private static readonly Dictionary<GameEvent, Action<GameEventArgs>>
|
||||
eventHandlers = new Dictionary<GameEvent, Action<GameEventArgs>>();
|
||||
|
||||
public static void Subscribe(GameEvent eventType, Action<GameEventArgs> handler)
|
||||
{
|
||||
if (!eventHandlers.ContainsKey(eventType))
|
||||
{
|
||||
eventHandlers[eventType] = handler;
|
||||
}
|
||||
else
|
||||
{
|
||||
eventHandlers[eventType] += handler;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Unsubscribe(GameEvent eventType, Action<GameEventArgs> handler)
|
||||
{
|
||||
if (eventHandlers.ContainsKey(eventType))
|
||||
{
|
||||
eventHandlers[eventType] -= handler;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Publish(GameEvent eventType, GameEventArgs args = null)
|
||||
{
|
||||
if (eventHandlers.TryGetValue(eventType, out var handler))
|
||||
{
|
||||
handler?.Invoke(args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class GameEventArgs
|
||||
{
|
||||
public object Sender { get; set; }
|
||||
public Dictionary<string, object> Data { get; set; } = new Dictionary<string, object>();
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 角色系统改进
|
||||
|
||||
#### 2.1 拆分CharacterBase
|
||||
**问题**: CharacterBase类过于庞大,承担了太多职责
|
||||
|
||||
**建议**: 将其拆分为多个专门类
|
||||
```csharp
|
||||
// 核心角色数据
|
||||
public class CharacterData : ScriptableObject
|
||||
{
|
||||
public string characterId;
|
||||
public string characterName;
|
||||
public Fraction defaultFaction;
|
||||
public AttributeData baseAttributes;
|
||||
public VFXData vfxData;
|
||||
public AudioContainer audioData;
|
||||
public List<SerializableType> availableBuffs;
|
||||
}
|
||||
|
||||
// 角色配置器
|
||||
public class CharacterBuilder
|
||||
{
|
||||
private CharacterData data;
|
||||
private List<ICharacterComponent> components = new List<ICharacterComponent>();
|
||||
|
||||
public CharacterBuilder SetData(CharacterData data) { ... }
|
||||
public CharacterBuilder AddComponent<T>() where T : ICharacterComponent { ... }
|
||||
public ICharacter Build() { ... }
|
||||
}
|
||||
|
||||
// 组件接口
|
||||
public interface ICharacterComponent
|
||||
{
|
||||
void Initialize(ICharacter character);
|
||||
void Update(float deltaTime);
|
||||
void Cleanup();
|
||||
}
|
||||
```
|
||||
|
||||
#### 2.2 改进属性系统
|
||||
**问题**: 当前属性使用字符串字典,缺少类型安全和IDE支持
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
// 属性ID枚举
|
||||
public enum AttributeId
|
||||
{
|
||||
// 基础属性
|
||||
MaxHealth,
|
||||
CurrentHealth,
|
||||
MaxEnergy,
|
||||
CurrentEnergy,
|
||||
MovementSpeed,
|
||||
AttackSpeed,
|
||||
|
||||
// 战斗属性
|
||||
PhysicalAttack,
|
||||
PhysicalDefense,
|
||||
EnergyAttack,
|
||||
EnergyDefense,
|
||||
CriticalRate,
|
||||
CriticalDamage,
|
||||
|
||||
// 抗性
|
||||
FireResistance,
|
||||
IceResistance,
|
||||
LightningResistance,
|
||||
|
||||
// 特殊属性
|
||||
LifeSteal,
|
||||
CooldownReduction,
|
||||
}
|
||||
|
||||
// 属性修饰器
|
||||
public interface IAttributeModifier
|
||||
{
|
||||
int Priority { get; }
|
||||
AttributeId TargetAttribute { get; }
|
||||
float Modify(float originalValue);
|
||||
}
|
||||
|
||||
// 属性计算器
|
||||
public class AttributeCalculator
|
||||
{
|
||||
private List<IAttributeModifier> modifiers = new List<IAttributeModifier>();
|
||||
|
||||
public float Calculate(AttributeId attributeId, float baseValue)
|
||||
{
|
||||
var applicableModifiers = modifiers
|
||||
.Where(m => m.TargetAttribute == attributeId)
|
||||
.OrderBy(m => m.Priority);
|
||||
|
||||
float result = baseValue;
|
||||
foreach (var modifier in applicableModifiers)
|
||||
{
|
||||
result = modifier.Modify(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 战斗系统改进
|
||||
|
||||
#### 3.1 建立战斗配置系统
|
||||
**问题**: 战斗参数硬编码,难以平衡调整
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
[CreateAssetMenu(fileName = "BattleConfig", menuName = "Cielonos/Config/BattleConfig")]
|
||||
public class BattleConfig : ScriptableObject
|
||||
{
|
||||
[Header("Damage Calculation")]
|
||||
public float baseCriticalMultiplier = 1.5f;
|
||||
public float maxCriticalMultiplier = 3.0f;
|
||||
public float levelDamageBonus = 0.1f;
|
||||
|
||||
[Header("Breakthrough Thresholds")]
|
||||
public float weakBreakthroughThreshold = 0.5f;
|
||||
public float mediumBreakthroughThreshold = 0.75f;
|
||||
public float heavyBreakthroughThreshold = 1.0f;
|
||||
|
||||
[Header("Hit Detection")]
|
||||
public float hitstopDuration = 0.05f;
|
||||
public float screenShakeIntensity = 0.1f;
|
||||
|
||||
[Header("Damage Numbers")]
|
||||
public float damageNumberScale = 1.0f;
|
||||
public float criticalScale = 1.5f;
|
||||
public float damageNumberLifetime = 1.0f;
|
||||
}
|
||||
|
||||
public class BattleConfigProvider
|
||||
{
|
||||
public static BattleConfig Config =>
|
||||
Resources.Load<BattleConfig>("Config/BattleConfig");
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.2 改进攻击判定系统
|
||||
**问题**: AttackArea承担了过多职责
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
// 攻击配置
|
||||
[CreateAssetMenu(fileName = "AttackConfig", menuName = "Cielonos/Attack/AttackConfig")]
|
||||
public class AttackConfig : ScriptableObject
|
||||
{
|
||||
public LayerMask targetLayers;
|
||||
public float hitboxActiveDuration;
|
||||
public Vector3 hitboxSize;
|
||||
public Vector3 hitboxOffset;
|
||||
public bool useRaycast;
|
||||
public float raycastDistance;
|
||||
}
|
||||
|
||||
// 命中结果
|
||||
public struct HitResult
|
||||
{
|
||||
public ICharacter Target;
|
||||
public Vector3 HitPoint;
|
||||
public Vector3 HitNormal;
|
||||
public bool IsCritical;
|
||||
public float FinalDamage;
|
||||
public DamageType DamageType;
|
||||
}
|
||||
|
||||
// 命中事件
|
||||
public class HitEventArgs : GameEventArgs
|
||||
{
|
||||
public HitResult HitResult { get; set; }
|
||||
public ICharacter Attacker { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 物品系统改进
|
||||
|
||||
#### 4.1 建立物品数据库
|
||||
**问题**: 物品管理分散在各处
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
[CreateAssetMenu(fileName = "ItemDatabase", menuName = "Cielonos/Items/Database")]
|
||||
public class ItemDatabase : ScriptableObject
|
||||
{
|
||||
[SerializeField] private List<WeaponData> weapons = new List<WeaponData>();
|
||||
[SerializeField] private List<ArmorData> armors = new List<ArmorData>();
|
||||
[SerializeField] private List<ConsumableData> consumables = new List<ConsumableData>>();
|
||||
|
||||
public WeaponData GetWeapon(string id) => weapons.FirstOrDefault(w => w.Id == id);
|
||||
public T GetItem<T>(string id) where T : ItemData
|
||||
{
|
||||
var field = typeof(ItemDatabase).GetField(typeof(T).Name.ToLower() + "s",
|
||||
BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
var list = field?.GetValue(this) as IEnumerable<ItemData>;
|
||||
return list?.FirstOrDefault(i => i.Id == id) as T;
|
||||
}
|
||||
}
|
||||
|
||||
// 物品生成器
|
||||
public static class ItemFactory
|
||||
{
|
||||
public static IItem Create(ItemData data, int level = 1)
|
||||
{
|
||||
return data switch
|
||||
{
|
||||
WeaponData weaponData => CreateWeapon(weaponData, level),
|
||||
ArmorData armorData => CreateArmor(armorData, level),
|
||||
ConsumableData consumableData => CreateConsumable(consumableData),
|
||||
_ => throw new ArgumentException($"Unknown item type: {data.GetType()}")
|
||||
};
|
||||
}
|
||||
|
||||
private static Weapon CreateWeapon(WeaponData data, int level)
|
||||
{
|
||||
var weapon = new Weapon();
|
||||
weapon.Initialize(data, level);
|
||||
return weapon;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. AI系统改进
|
||||
|
||||
#### 5.1 建立AI配置系统
|
||||
**问题**: AI行为硬编码,缺乏配置化
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
[CreateAssetMenu(fileName = "AIConfig", menuName = "Cielonos/AI/AIConfig")]
|
||||
public class AIConfig : ScriptableObject
|
||||
{
|
||||
[Header("Detection")]
|
||||
public float detectionRange = 10f;
|
||||
public float attackRange = 2f;
|
||||
public float loseInterestRange = 20f;
|
||||
|
||||
[Header("Movement")]
|
||||
public float preferredDistance = 5f;
|
||||
public float strafeSpeed = 2f;
|
||||
|
||||
[Header("Decision Making")]
|
||||
public float decisionInterval = 0.5f;
|
||||
public float healthThresholdForRetreat = 0.3f;
|
||||
public float energyThresholdForSpecial = 0.7f;
|
||||
|
||||
[Header("Behavior Weights")]
|
||||
public float attackWeight = 1.0f;
|
||||
public float defendWeight = 0.5f;
|
||||
public float retreatWeight = 0.3f;
|
||||
public float supportWeight = 0.4f;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class BehaviorState
|
||||
{
|
||||
public string stateName;
|
||||
public BehaviorTree tree;
|
||||
public List<Transition> transitions = new List<Transition>();
|
||||
public float enterDelay;
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class Transition
|
||||
{
|
||||
public string targetState;
|
||||
public List<Condition> conditions = new List<Condition>();
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public abstract class Condition
|
||||
{
|
||||
public abstract bool Evaluate(IAIController controller);
|
||||
}
|
||||
```
|
||||
|
||||
### 6. 数据持久化改进
|
||||
|
||||
#### 6.1 建立游戏存档系统
|
||||
**问题**: 缺乏统一的存档管理
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
[System.Serializable]
|
||||
public class GameSaveData
|
||||
{
|
||||
public string saveId;
|
||||
public DateTime saveTime;
|
||||
public int playerLevel;
|
||||
public Vector3 playerPosition;
|
||||
public List<ItemSaveData> inventory;
|
||||
public List<string> unlockedAbilities;
|
||||
public int currentZoneIndex;
|
||||
public int currentScore;
|
||||
public List<AchievementSaveData> achievements;
|
||||
}
|
||||
|
||||
public interface ISaveSystem
|
||||
{
|
||||
void Save(GameSaveData data);
|
||||
GameSaveData Load(string saveId);
|
||||
List<string> GetAllSaves();
|
||||
void DeleteSave(string saveId);
|
||||
}
|
||||
|
||||
public class EasySaveAdapter : ISaveSystem
|
||||
{
|
||||
public void Save(GameSaveData data)
|
||||
{
|
||||
ES3.Save("save_" + data.saveId, data);
|
||||
}
|
||||
|
||||
public GameSaveData Load(string saveId)
|
||||
{
|
||||
return ES3.Load<GameSaveData>("save_" + saveId);
|
||||
}
|
||||
|
||||
public List<string> GetAllSaves()
|
||||
{
|
||||
// 实现保存文件列表获取
|
||||
}
|
||||
|
||||
public void DeleteSave(string saveId)
|
||||
{
|
||||
ES3.DeleteKey("save_" + saveId);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 7. UI系统改进
|
||||
|
||||
#### 7.1 建立UI框架
|
||||
**问题**: UI组件耦合度高,难以复用
|
||||
|
||||
**建议**:
|
||||
```csharp
|
||||
public abstract class UIScreen : MonoBehaviour
|
||||
{
|
||||
protected bool isVisible;
|
||||
|
||||
public virtual void Show()
|
||||
{
|
||||
gameObject.SetActive(true);
|
||||
OnShow();
|
||||
isVisible = true;
|
||||
}
|
||||
|
||||
public virtual void Hide()
|
||||
{
|
||||
OnHide();
|
||||
gameObject.SetActive(false);
|
||||
isVisible = false;
|
||||
}
|
||||
|
||||
protected abstract void OnShow();
|
||||
protected abstract void OnHide();
|
||||
}
|
||||
|
||||
public class UIManager
|
||||
{
|
||||
private Stack<UIScreen> screenStack = new Stack<UIScreen>();
|
||||
|
||||
public void ShowScreen<T>() where T : UIScreen
|
||||
{
|
||||
var screen = GetScreen<T>();
|
||||
if (screen != null)
|
||||
{
|
||||
screen.Show();
|
||||
screenStack.Push(screen);
|
||||
}
|
||||
}
|
||||
|
||||
public void CloseCurrentScreen()
|
||||
{
|
||||
if (screenStack.Count > 0)
|
||||
{
|
||||
var screen = screenStack.Pop();
|
||||
screen.Hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8. 代码规范与工具
|
||||
|
||||
#### 8.1 增加代码注释
|
||||
**建议**: 在关键类和方法添加XML文档注释
|
||||
```csharp
|
||||
/// <summary>
|
||||
/// 伤害信息结构体,包含所有与伤害计算相关的参数
|
||||
/// </summary>
|
||||
public struct DamageInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 伤害来源
|
||||
/// </summary>
|
||||
public IDamageSource Source;
|
||||
|
||||
/// <summary>
|
||||
/// 伤害值基数
|
||||
/// </summary>
|
||||
public float BaseDamage;
|
||||
|
||||
/// <summary>
|
||||
/// 伤害类型
|
||||
/// </summary>
|
||||
public DamageType Type;
|
||||
}
|
||||
```
|
||||
|
||||
#### 8.2 建立自定义编辑器工具
|
||||
**建议**: 为复杂系统创建编辑器窗口
|
||||
```csharp
|
||||
#if UNITY_EDITOR
|
||||
public class CharacterEditorWindow : EditorWindow
|
||||
{
|
||||
[MenuItem("Cielonos/Character Editor")]
|
||||
public static void OpenWindow()
|
||||
{
|
||||
GetWindow<CharacterEditorWindow>("Character Editor");
|
||||
}
|
||||
|
||||
private void OnGUI()
|
||||
{
|
||||
// 创建角色编辑器UI
|
||||
}
|
||||
}
|
||||
|
||||
public class BuffEditorWindow : EditorWindow
|
||||
{
|
||||
[MenuItem("Cielonos/Buff Editor")]
|
||||
public static void OpenWindow()
|
||||
{
|
||||
GetWindow<BuffEditorWindow>("Buff Editor");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、改进优先级
|
||||
|
||||
### P0 - 必须改进(阻塞性问题)
|
||||
1. 建立核心接口层
|
||||
2. 改进属性系统类型安全
|
||||
3. 建立消息总线
|
||||
|
||||
### P1 - 重要改进(核心功能)
|
||||
1. 拆分CharacterBase
|
||||
2. 建立战斗配置系统
|
||||
3. 建立物品数据库
|
||||
4. 建立AI配置系统
|
||||
|
||||
### P2 - 优化改进(提升开发效率)
|
||||
1. 建立存档系统
|
||||
2. 建立UI框架
|
||||
3. 增加代码注释
|
||||
4. 创建编辑器工具
|
||||
|
||||
### P3 - 长期改进(架构优化)
|
||||
1. 服务定位器模式
|
||||
2. 组件化重构
|
||||
3. 配置化完善
|
||||
|
||||
---
|
||||
|
||||
## 四、总结
|
||||
|
||||
当前项目在架构上已经奠定了良好的基础,核心系统基本完备。要构建完善的Roguelike ARPG框架,重点需要:
|
||||
|
||||
1. **抽象接口层**: 建立清晰的接口边界,提高系统可测试性和可替换性
|
||||
2. **配置驱动**: 将硬编码转为配置化,提高设计迭代效率
|
||||
3. **数据管理**: 建立统一的数据管理系统,包括物品、敌人、AI等
|
||||
4. **代码规范**: 增加注释和文档,提高代码可维护性
|
||||
5. **工具支持**: 开发自定义编辑器工具,提高开发效率
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
@@ -1,420 +0,0 @@
|
||||
# 《绝区零》与《鸣潮》闪避系统视觉特效对比分析
|
||||
|
||||
## 一、核心机制对比
|
||||
|
||||
### 1.1 《绝区零》极限闪避系统
|
||||
|
||||
#### 触发条件
|
||||
- 敌人攻击出现**黄光或红光**前摇提示(闪光攻击)
|
||||
- 在攻击即将命中的瞬间按下闪避键
|
||||
- 按方向键+闪避键可向移动方向冲刺
|
||||
|
||||
#### 核心机制
|
||||
1. **极限闪避(极限视域)**
|
||||
- 触发后进入**短暂的慢动作模式**(子弹时间)
|
||||
- 整个战场进入时间减缓
|
||||
- 持续时间短暂但提供宝贵反应时间
|
||||
|
||||
2. **闪避反击**
|
||||
- 极限闪避成功后,可立即按下普攻键
|
||||
- 发动带有"重击"效果的反击
|
||||
- 造成伤害和失衡值
|
||||
|
||||
3. **无敌帧**
|
||||
- 闪避期间完全无敌
|
||||
- 极限闪避同样具有无敌效果
|
||||
|
||||
#### 视觉特效特征
|
||||
- **蓝色光影效果**:触发极限闪避时的核心视觉反馈
|
||||
- **时间减缓**:整个战场进入慢动作
|
||||
- **角色特殊光效**:蓝色光效包围角色
|
||||
- **屏幕效果**:极限视域带来的视觉变化
|
||||
|
||||
#### 设计理念
|
||||
> "闪避+子弹时间"的设计巧妙地通过画面运镜速度让玩家在视觉上获得即时爽感
|
||||
> — 《绝区零》开发访谈
|
||||
|
||||
---
|
||||
|
||||
### 1.2 《鸣潮》完美闪避系统
|
||||
|
||||
#### 触发条件
|
||||
- 敌人攻击时,在**攻击判定范围边缘**进行闪避
|
||||
- 敌人出现**黄色光圈提示**时可触发
|
||||
- 普通闪避约20帧,完美闪避约60帧(不同角色时长不同)
|
||||
|
||||
#### 核心机制
|
||||
1. **完美闪避**
|
||||
- 触发**子弹时间**效果
|
||||
- 敌人攻击判定范围比视觉范围大,可"蹭闪"
|
||||
- 闪避无敌帧较长,不易被击中
|
||||
|
||||
2. **逆势回击**
|
||||
- 完美闪避后点击攻击键触发
|
||||
- 伤害倍率较高
|
||||
- 实战中建议多运用
|
||||
|
||||
3. **弹刀机制(类似完美格挡)**
|
||||
- 敌人出现黄色光圈时精准命中攻击
|
||||
- 完美格挡攻击
|
||||
- 打断敌人招式、大幅削减韧性
|
||||
|
||||
#### 视觉特效特征
|
||||
- **子弹时间效果**:完美闪避触发时时间减缓
|
||||
- **反击特效**:逆势回击时的视觉冲击
|
||||
- **流畅连招**:完美闪避后接反击的丝滑感
|
||||
|
||||
#### 设计理念
|
||||
> "完美闪避+逆势回击"机制,在敌人攻击瞬间闪避触发子弹时间,然后接一套反击,那个音效和画面反馈爽到头皮发麻
|
||||
> — 玩家评价
|
||||
|
||||
---
|
||||
|
||||
## 二、视觉特效详细对比
|
||||
|
||||
### 2.1 时间效果
|
||||
|
||||
| 特性 | 《绝区零》 | 《鸣潮》 |
|
||||
|------|-----------|---------|
|
||||
| **时间减缓程度** | 明显的子弹时间 | 明显的子弹时间 |
|
||||
| **持续时间** | 短暂但足够反应 | 约60帧(完美闪避) |
|
||||
| **恢复方式** | 快速平滑恢复 | 快速平滑恢复 |
|
||||
| **全局/局部** | 全局时间减缓 | 全局时间减缓 |
|
||||
| **玩家感知** | 立即可察觉 | 立即可察觉 |
|
||||
|
||||
### 2.2 屏幕视觉效果
|
||||
|
||||
#### 《绝区零》
|
||||
| 效果类型 | 描述 | 目的 |
|
||||
|---------|------|------|
|
||||
| **蓝色光影** | 极限闪避触发时角色周围出现蓝色光效 | 强调成功触发,视觉确认 |
|
||||
| **画面模糊(推测)** | 子弹时间时可能有轻微模糊 | 增强速度感 |
|
||||
| **色调变化** | 可能偏向冷色调 | 冷静、专注的氛围营造 |
|
||||
| **极限视域** | 整个战场进入慢动作 | 争取反应时间 |
|
||||
|
||||
#### 《鸣潮》
|
||||
| 效果类型 | 描述 | 目的 |
|
||||
|---------|------|------|
|
||||
| **子弹时间** | 完美闪避触发时间减缓 | 战术优势 |
|
||||
| **反击特效** | 逆势回击时的视觉冲击 | 成就感 |
|
||||
| **流畅连招** | 完美闪避后接反击无延迟 | 操作爽感 |
|
||||
| **屏幕闪烁** | 可能在关键时刻有闪烁 | 强调效果 |
|
||||
|
||||
### 2.3 相机效果
|
||||
|
||||
#### 《绝区零》
|
||||
- **轻微相机调整**:子弹时间时相机可能有微小变化
|
||||
- **焦点保持**:保持对战斗区域的聚焦
|
||||
- **流畅过渡**:时间恢复时平滑过渡
|
||||
|
||||
#### 《鸣潮》
|
||||
- **相机稳定**:保持战斗视野稳定
|
||||
- **焦点跟随**:紧跟角色和敌人
|
||||
- **快速响应**:完美闪避后立即响应
|
||||
|
||||
---
|
||||
|
||||
## 三、核心设计原则总结
|
||||
|
||||
### 3.1 时间控制原则
|
||||
|
||||
1. **子弹时间必须明显但不过长**
|
||||
- 太短:玩家无法感知
|
||||
- 太长:影响战斗节奏,打断游戏流畅性
|
||||
- 建议:0.2-0.5秒的明显减缓
|
||||
|
||||
2. **时间恢复必须平滑**
|
||||
- 使用缓动曲线(EaseOut)
|
||||
- 避免时间跳跃
|
||||
- 保持战斗流畅性
|
||||
|
||||
3. **时间效果应有上下文**
|
||||
- 只有完美闪避触发
|
||||
- 普通闪避不触发
|
||||
- 避免时间效果滥用
|
||||
|
||||
### 3.2 视觉效果原则
|
||||
|
||||
1. **即时反馈**
|
||||
- 效果必须在触发瞬间可见
|
||||
- 视觉确认比文字提示更有效
|
||||
|
||||
2. **与时间效果同步**
|
||||
- 视觉效果应与时间减缓协调
|
||||
- 增强时间扭曲的感知
|
||||
|
||||
3. **适度夸张但不过度**
|
||||
- 增强成就感但不造成视觉疲劳
|
||||
- 保持游戏可读性
|
||||
|
||||
4. **颜色编码**
|
||||
- 成功效果使用统一色调
|
||||
- 如蓝色(绝区零)代表极限状态
|
||||
|
||||
### 3.3 反馈强度分级
|
||||
|
||||
#### 普通闪避(Dash/Dodge)
|
||||
| 效果 | 强度 | 说明 |
|
||||
|------|------|------|
|
||||
| FOV变化 | 低 | 轻微扩大视野 |
|
||||
| 震动 | 低-中 | 轻微旋转震动 |
|
||||
| 模糊 | 低 | 轻微运动模糊 |
|
||||
| 时间效果 | 无 | 不触发时间减缓 |
|
||||
|
||||
#### 完美闪避(Perfect Dodge)
|
||||
| 效果 | 强度 | 说明 |
|
||||
|------|------|------|
|
||||
| FOV变化 | 中-高 | 明显扩大视野 |
|
||||
| 震动 | 中-高 | 中等强度震动 |
|
||||
| 模糊 | 高 | 明显的径向模糊 |
|
||||
| 时间效果 | **高** | **明显的子弹时间** |
|
||||
| 色调 | 冷色调 | 蓝色系强调 |
|
||||
|
||||
---
|
||||
|
||||
## 四、Cielonos 闪避反馈系统优化建议
|
||||
|
||||
### 4.1 基于《绝区零》和《鸣潮》的优化方案
|
||||
|
||||
#### 方案一:简化但有效(推荐)
|
||||
|
||||
**设计理念**:借鉴《绝区零》的"蓝色光影+子弹时间"和《鸣潮》的"流畅反击",但简化特效数量,专注于核心反馈。
|
||||
|
||||
##### 普通闪避(Dash/Dodge)
|
||||
```
|
||||
效果组合:
|
||||
1. FOV变化:+5° → 0°(0.2秒)
|
||||
2. 旋转震动:轻微(X:1°, Y:0.5°)(0.15秒)
|
||||
3. 径向模糊:轻微(0.2强度)(0.15秒)
|
||||
|
||||
时间效果:无
|
||||
色调效果:无
|
||||
```
|
||||
|
||||
##### 完美闪避(Perfect Dodge)
|
||||
```
|
||||
效果组合:
|
||||
1. 全局时间缩放:0.3x → 1.0x(0.3秒)
|
||||
2. FOV变化:+10° → 0°(0.35秒)
|
||||
3. 旋转震动:中等(X:3°, Y:2°)(0.3秒)
|
||||
4. 径向模糊:明显(0.6强度)(0.25秒)
|
||||
5. 暗角强化:强度0.4 → 0.2(0.35秒)
|
||||
6. 色差效果:轻微(0.2强度)(0.2秒)
|
||||
|
||||
色调效果:偏蓝(可选)
|
||||
特效:无屏幕闪光(避免过度)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 效果明显但不过度
|
||||
- 保持游戏可读性
|
||||
- 性能友好
|
||||
- 符合二次元风格
|
||||
|
||||
#### 方案二:增强沉浸感
|
||||
|
||||
**设计理念**:更接近《绝区零》的视觉效果,增加更多屏幕特效。
|
||||
|
||||
##### 普通闪避(Dash/Dodge)
|
||||
```
|
||||
效果组合:
|
||||
1. FOV变化:+6° → 0°(0.25秒)
|
||||
2. 旋转震动:中等(X:1.5°, Y:1°, Z:2°)(0.2秒)
|
||||
3. 径向模糊:中(0.3强度)(0.2秒)
|
||||
4. 色调偏移:轻微偏青(0.15秒)
|
||||
|
||||
时间效果:无
|
||||
```
|
||||
|
||||
##### 完美闪避(Perfect Dodge)
|
||||
```
|
||||
效果组合:
|
||||
1. 全局时间缩放:0.25x → 1.0x(0.35秒)
|
||||
2. FOV变化:+12° → 0°(0.4秒)
|
||||
3. 旋转震动:强(X:4°, Y:3°, Z:5°)(0.35秒)
|
||||
4. 径向模糊:强(0.7强度)(0.3秒)
|
||||
5. 暗角强化:强度0.5 → 0.15(0.4秒)
|
||||
6. 色差效果:中(0.3强度)(0.25秒)
|
||||
7. 屏幕闪光:轻微白闪(0.08秒)
|
||||
8. Bloom强化:轻微(0.2秒)
|
||||
|
||||
色调效果:偏蓝(持续0.25秒)
|
||||
特效:可能有角色周围的蓝色光效(如果性能允许)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 视觉效果更丰富
|
||||
- 成就感更强
|
||||
- 更接近《绝区零》的体验
|
||||
|
||||
**劣势**:
|
||||
- 可能影响游戏可读性
|
||||
- 性能开销较大
|
||||
- 需要更多测试调整
|
||||
|
||||
### 4.2 关键实现建议
|
||||
|
||||
#### 时间缩放
|
||||
```csharp
|
||||
// 推荐参数
|
||||
Time.timeScale = 0.25f → 1.0f
|
||||
持续时间:0.3秒
|
||||
曲线:EaseOutQuad(快速恢复)
|
||||
|
||||
// 避免
|
||||
- 缩放过低(<0.2):过于夸张
|
||||
- 缩放过长(>0.5秒):打断节奏
|
||||
- 时间抖动:不平滑
|
||||
```
|
||||
|
||||
#### FOV变化
|
||||
```csharp
|
||||
// 推荐参数
|
||||
FOV增量:+8° ~ +12°
|
||||
恢复时间:0.3-0.4秒
|
||||
曲线:EaseOut(快速恢复)
|
||||
|
||||
// 关键
|
||||
- FOV变化应与时间恢复同步
|
||||
- 不要让FOV变化单独存在
|
||||
```
|
||||
|
||||
#### 屏幕效果优先级
|
||||
```
|
||||
1. 径向模糊(必须)- 速度感核心
|
||||
2. 暗角强化(必须)- 焦点集中
|
||||
3. 色差效果(推荐)- 视觉冲击
|
||||
4. 屏幕闪光(可选)- 可能过度
|
||||
5. 色调偏移(可选)- 氛围营造
|
||||
```
|
||||
|
||||
### 4.3 性能考量
|
||||
|
||||
#### 避免过度效果
|
||||
- 同时激活的效果不超过5个
|
||||
- 避免复杂的着色器效果
|
||||
- 使用性能友好的模糊算法
|
||||
|
||||
#### 优化建议
|
||||
```csharp
|
||||
// 示例:条件激活
|
||||
if (qualityLevel >= Medium)
|
||||
{
|
||||
EnableRadialBlur();
|
||||
EnableVignette();
|
||||
}
|
||||
|
||||
if (qualityLevel >= High)
|
||||
{
|
||||
EnableChromaticAberration();
|
||||
EnableFOVChange();
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、最终推荐方案
|
||||
|
||||
### 5.1 核心设计原则
|
||||
|
||||
1. **普通闪避**:速度感 + 轻微反馈
|
||||
2. **完美闪避**:子弹时间 + 强化视觉 + 成就感
|
||||
|
||||
### 5.2 推荐配置
|
||||
|
||||
#### 普通闪避(Dash/Dodge)
|
||||
| 效果 | 参数 | 优先级 |
|
||||
|------|------|--------|
|
||||
| FOV变化 | +6°(0.2秒) | P1 |
|
||||
| 旋转震动 | 轻微(0.15秒) | P1 |
|
||||
| 径向模糊 | 0.25强度(0.15秒) | P1 |
|
||||
| 时间缩放 | 无 | - |
|
||||
| 色调变化 | 无 | - |
|
||||
|
||||
#### 完美闪避(Perfect Dodge)
|
||||
| 效果 | 参数 | 优先级 |
|
||||
|------|------|--------|
|
||||
| 时间缩放 | 0.3x → 1.0x(0.3秒) | **P0** |
|
||||
| FOV变化 | +10°(0.35秒) | P1 |
|
||||
| 旋转震动 | 中等(0.3秒) | P1 |
|
||||
| 径向模糊 | 0.6强度(0.25秒) | P1 |
|
||||
| 暗角强化 | 强度0.4(0.35秒) | P1 |
|
||||
| 色差效果 | 0.25强度(0.2秒) | P2 |
|
||||
| 色调变化 | 偏蓝(0.2秒) | P2 |
|
||||
| 屏幕闪光 | 无 | P3 |
|
||||
|
||||
### 5.3 与《绝区零》《鸣潮》的对比
|
||||
|
||||
| 特性 | 我们的方案 | 《绝区零》 | 《鸣潮》 |
|
||||
|------|----------|----------|---------|
|
||||
| 完美闪避时间效果 | 0.3x | ✅ 子弹时间 | ✅ 子弹时间 |
|
||||
| 完美闪避视觉 | 强化但克制 | ✅ 蓝色光影 | ✅ 流畅反击 |
|
||||
| 普通闪避反馈 | 轻微速度感 | ❓ 不明显 | ❓ 不明显 |
|
||||
| 屏幕效果数量 | 5-6个 | 适中 | 适中 |
|
||||
| 整体风格 | 二次元+克制 | 动作+华丽 | 科幻+流畅 |
|
||||
|
||||
---
|
||||
|
||||
## 六、后续调整建议
|
||||
|
||||
### 6.1 测试阶段
|
||||
|
||||
1. **基础测试**:确保所有效果正常工作
|
||||
2. **性能测试**:60FPS下是否流畅
|
||||
3. **玩家测试**:收集反馈
|
||||
4. **调整迭代**:根据反馈调整参数
|
||||
|
||||
### 6.2 平衡调整
|
||||
|
||||
```
|
||||
如果反馈太强:
|
||||
- 减少效果持续时间
|
||||
- 降低效果强度
|
||||
- 减少同时激活的效果数量
|
||||
|
||||
如果反馈太弱:
|
||||
- 增加效果强度
|
||||
- 延长持续时间
|
||||
- 增加效果数量
|
||||
|
||||
如果影响可读性:
|
||||
- 减少模糊效果
|
||||
- 减少色调变化
|
||||
- 缩短时间缩放时间
|
||||
```
|
||||
|
||||
### 6.3 长期优化
|
||||
|
||||
1. **添加配置选项**
|
||||
- 反馈强度滑块
|
||||
- 效果开关(有无障碍选项)
|
||||
|
||||
2. **动态调整**
|
||||
- 根据连闪次数增强效果
|
||||
- 根据敌人攻击强度调整
|
||||
|
||||
3. **音效配合**
|
||||
- 与视觉反馈同步
|
||||
- 增强打击感
|
||||
|
||||
---
|
||||
|
||||
## 七、参考资料
|
||||
|
||||
### 《绝区零》
|
||||
- 官方网站:https://zzz.mihoyo.com/
|
||||
- 战斗系统核心:"闪避+子弹时间"设计
|
||||
- 视觉特色:蓝色光影效果
|
||||
- 玩家口碑:"简约不简单"的轻量化战斗体验
|
||||
|
||||
### 《鸣潮》
|
||||
- 官方网站:https://mc.kurogames.com/
|
||||
- 战斗系统核心:"完美闪避+逆势回击"
|
||||
- 视觉特色:流畅连招、科幻风格
|
||||
- 玩家口碑:打击感强,操作爽感
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*分析参考:绝区零官方资料、鸣潮官方资料、各大游戏媒体评测、玩家社区反馈*
|
||||
*生成者: Game Designer Agent*
|
||||
@@ -1,401 +0,0 @@
|
||||
# Cielonos 闪避反馈系统实现进度
|
||||
|
||||
## ✅ 已完成的工作
|
||||
|
||||
### 1. 代码架构修改
|
||||
|
||||
#### 1.1 DodgeSource.Default() 方法重构
|
||||
- **文件**:`Assets/Scripts/MainGame/Characters/Base/Subcontrollers/Reaction/DodgeSubmodule.cs`
|
||||
- **修改**:移除了MMF_Feedback相关的代码(MMF_RadialBlur、MMF_AdvancedVignette)
|
||||
- **状态**:✅ 完成
|
||||
|
||||
#### 1.2 PlayerAnimationSubcontroller 闪避反馈重构
|
||||
- **文件**:`Assets/Scripts/MainGame/Characters/Player/Animation/PlayerAnimScDashDodge.cs`
|
||||
- **修改**:
|
||||
- 移除了所有MMF_Feedback引用
|
||||
- Dash反馈使用新的`player.feedbackSc.PlayFeedback("Dash")`
|
||||
- Dodge反馈使用新的`player.feedbackSc.PlayFeedback("Dodge")`
|
||||
- **状态**:✅ 完成
|
||||
|
||||
#### 1.3 EventSubmodule 新增事件
|
||||
- **文件**:`Assets/Scripts/MainGame/Characters/Base/Submodules/EventSubmodule.cs`
|
||||
- **新增事件**:
|
||||
- `onDodgeSuccess` - 完美闪避成功时触发
|
||||
- `onNormalDodgeSuccess` - 普通闪避成功时触发
|
||||
- **状态**:✅ 完成
|
||||
|
||||
#### 1.4 Player 事件监听注册
|
||||
- **文件**:`Assets/Scripts/MainGame/Characters/Player/Player.cs`
|
||||
- **新增内容**:
|
||||
- 在`InitializeSubmodules()`中注册PerfectDodge和NormalDodge事件监听
|
||||
- 新增`Feedback_PerfectDodge()`方法:播放完美闪避反馈
|
||||
- 新增`Feedback_NormalDodge()`方法:处理普通闪避反馈
|
||||
- **状态**:✅ 完成
|
||||
|
||||
#### 1.5 ReactionSubmodule 事件触发
|
||||
- **文件**:`Assets/Scripts/MainGame/AttackArea/Submodules/ReactionSubmodule.cs`
|
||||
- **修改**:
|
||||
- 完美闪避成功后触发`dodger.eventSm.onDodgeSuccess.Invoke(firstDodgeSource)`
|
||||
- 普通闪避成功后触发`dodger.eventSm.onNormalDodgeSuccess.Invoke(firstDodgeSource)`
|
||||
- **状态**:✅ 完成
|
||||
|
||||
---
|
||||
|
||||
## 📋 FeedbackData 配置状态
|
||||
|
||||
### 已创建的FeedbackData文件
|
||||
|
||||
位置:`Assets/Prefabs/MainGame/Characters/Player/Data/Feedbacks/`
|
||||
|
||||
| 文件名 | 用途 | 配置状态 |
|
||||
|--------|------|---------|
|
||||
| Player_Feedback_Dash.asset | 冲刺反馈 | ⚠️ 待配置 |
|
||||
| Player_Feedback_Dodge.asset | 后撤步反馈 | ⚠️ 待配置 |
|
||||
| Player_Feedback_NormalDodge.asset | 普通闪避反馈 | ⚠️ 待配置 |
|
||||
| Player_Feedback_PerfectDodge.asset | 完美闪避反馈 | ⚠️ 待配置 |
|
||||
|
||||
**注意**:这些文件已创建但tracks为空,需要在Unity编辑器中配置。
|
||||
|
||||
---
|
||||
|
||||
## 🎯 FeedbackData 配置指南
|
||||
|
||||
### 2.1 Dash(冲刺)FeedbackData 配置
|
||||
|
||||
**目标**:强调速度感、移动感
|
||||
|
||||
**Track 1: "Camera" - 相机效果**
|
||||
```
|
||||
Clip 1: CameraFieldOfViewAction
|
||||
- FOV增量: +6°
|
||||
- 持续时间: 0.2秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 2: "Camera" - 旋转震动**
|
||||
```
|
||||
Clip 1: CameraRotationShakeAction
|
||||
- Rotation: (1°, 0.5°, 2°)
|
||||
- 持续时间: 0.15秒
|
||||
- 曲线: QuickImpact
|
||||
```
|
||||
|
||||
**Track 3: "PostProcess" - 径向模糊**
|
||||
```
|
||||
Clip 1: RadialBlurAction
|
||||
- Intensity: 0.25
|
||||
- 持续时间: 0.15秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
### 2.2 Dodge(后撤步)FeedbackData 配置
|
||||
|
||||
**目标**:强调突然性、灵活性
|
||||
|
||||
**Track 1: "Camera" - 相机效果**
|
||||
```
|
||||
Clip 1: CameraFieldOfViewAction
|
||||
- FOV增量: +5°
|
||||
- 持续时间: 0.2秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 2: "Camera" - 旋转震动**
|
||||
```
|
||||
Clip 1: CameraRotationShakeAction
|
||||
- Rotation: (0.5°, 0.3°, 1.5°)
|
||||
- 持续时间: 0.12秒
|
||||
- 曲线: QuickImpact
|
||||
```
|
||||
|
||||
**Track 3: "PostProcess" - 径向模糊**
|
||||
```
|
||||
Clip 1: RadialBlurAction
|
||||
- Intensity: 0.2
|
||||
- 持续时间: 0.12秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
### 2.3 NormalDodge(普通闪避)FeedbackData 配置
|
||||
|
||||
**说明**:NormalDodge用于普通闪避(非冲刺的短距离闪避)
|
||||
|
||||
**Track 1: "Camera" - 相机效果**
|
||||
```
|
||||
Clip 1: CameraFieldOfViewAction
|
||||
- FOV增量: +4°
|
||||
- 持续时间: 0.15秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 2: "Camera" - 旋转震动**
|
||||
```
|
||||
Clip 1: CameraRotationShakeAction
|
||||
- Rotation: (0.3°, 0.2°, 1°)
|
||||
- 持续时间: 0.1秒
|
||||
- 曲线: QuickImpact
|
||||
```
|
||||
|
||||
**Track 3: "PostProcess" - 径向模糊**
|
||||
```
|
||||
Clip 1: RadialBlurAction
|
||||
- Intensity: 0.15
|
||||
- 持续时间: 0.1秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
### 2.4 PerfectDodge(完美闪避)FeedbackData 配置
|
||||
|
||||
**目标**:时间扭曲 + 视觉强化 + 成就感
|
||||
|
||||
**Track 1: "Time" - 时间缩放**
|
||||
```
|
||||
Clip 1: TimeScaleModifierAction
|
||||
- Mode: Dynamic
|
||||
- Curve: Custom
|
||||
- RemapZero: 0.3
|
||||
- RemapOne: 1.0
|
||||
- 持续时间: 0.3秒
|
||||
- ⚠️ 重要:此Track不应受全局时间缩放影响
|
||||
```
|
||||
|
||||
**Track 2: "Camera" - FOV变化**
|
||||
```
|
||||
Clip 1: CameraFieldOfViewAction
|
||||
- FOV增量: +10°
|
||||
- 持续时间: 0.35秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 3: "Camera" - 旋转震动**
|
||||
```
|
||||
Clip 1: CameraRotationShakeAction
|
||||
- Rotation: (3°, 2°, 5°)
|
||||
- 持续时间: 0.3秒
|
||||
- 曲线: QuickImpact
|
||||
```
|
||||
|
||||
**Track 4: "PostProcess" - 暗角**
|
||||
```
|
||||
Clip 1: VignetteAction
|
||||
- Intensity: 0.4
|
||||
- 持续时间: 0.35秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 5: "PostProcess" - 径向模糊**
|
||||
```
|
||||
Clip 1: RadialBlurAction
|
||||
- Intensity: 0.6
|
||||
- 持续时间: 0.25秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
**Track 6: "PostProcess" - 色差**
|
||||
```
|
||||
Clip 1: ChromaticAberrationAction
|
||||
- Intensity: 0.25
|
||||
- 持续时间: 0.2秒
|
||||
- 曲线: FadeOut
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 接下来的步骤
|
||||
|
||||
### 步骤1:在Unity编辑器中配置FeedbackData
|
||||
|
||||
1. 打开Unity编辑器
|
||||
2. 导航到 `Assets/Prefabs/MainGame/Characters/Player/Data/Feedbacks/`
|
||||
3. 逐个配置上述FeedbackData文件
|
||||
|
||||
### 步骤2:在Player Prefab中关联FeedbackData
|
||||
|
||||
1. 选择Player Prefab
|
||||
2. 找到FeedbackDataCollection组件
|
||||
3. 确保以下键值对存在:
|
||||
- `"Dash"` → Player_Feedback_Dash.asset
|
||||
- `"Dodge"` → Player_Feedback_Dodge.asset
|
||||
- `"NormalDodge"` → Player_Feedback_NormalDodge.asset
|
||||
- `"PerfectDodge"` → Player_Feedback_PerfectDodge.asset
|
||||
|
||||
### 步骤3:测试
|
||||
|
||||
1. 进入游戏
|
||||
2. 测试冲刺反馈
|
||||
3. 测试后撤步反馈
|
||||
4. 测试普通闪避反馈
|
||||
5. 测试完美闪避反馈(需要被敌人攻击时在完美时机闪避)
|
||||
|
||||
### 步骤4:根据体验调整参数
|
||||
|
||||
根据实际手感调整:
|
||||
- FOV变化量
|
||||
- 震动强度
|
||||
- 模糊程度
|
||||
- 时间缩放值
|
||||
|
||||
---
|
||||
|
||||
## 📊 代码流程图
|
||||
|
||||
```
|
||||
玩家触发闪避
|
||||
↓
|
||||
PlayerAnimationSubcontroller.SetupDash/SetupDodge()
|
||||
↓
|
||||
PlayerAnimationSubcontroller.DashStart/DodgeStart()
|
||||
↓
|
||||
player.feedbackSc.PlayFeedback("Dash"/"Dodge") // 播放普通闪避反馈
|
||||
↓
|
||||
ApplyDodge() → 添加闪避源
|
||||
↓
|
||||
敌人攻击命中
|
||||
↓
|
||||
ReactionSubmodule.CheckDodge()
|
||||
↓
|
||||
判断是否完美闪避
|
||||
↓
|
||||
DodgeSource.PerfectDodge() / NormalDodge()
|
||||
↓
|
||||
触发事件: dodger.eventSm.onDodgeSuccess/onNormalDodgeSuccess
|
||||
↓
|
||||
Player.Feedback_PerfectDodge() / Feedback_NormalDodge()
|
||||
↓
|
||||
player.feedbackSc.PlayFeedback("PerfectDodge") // 播放完美闪避反馈
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 注意事项
|
||||
|
||||
1. **时间缩放**:PerfectDodge的TimeScaleModifierAction必须不受全局时间缩放影响
|
||||
2. **性能**:同时激活的效果不要超过5个
|
||||
3. **调试**:可以在Player.Feedback_PerfectDodge()中添加Debug.Log用于调试
|
||||
|
||||
---
|
||||
|
||||
## 🔧 问题修复:TimeScaleModifierAction立即生效
|
||||
|
||||
### 问题描述
|
||||
当PerfectDodge播放时,TimeScaleModifierAction修改的globalTimeScale在同一帧内不会立即被其他Feedback读取到。
|
||||
|
||||
### 原因
|
||||
- TimeScaleModifierAction.OnStart()调用TimeScaleShakeEvent.Trigger()
|
||||
- 只是注册了TimeScaleShakeInstance
|
||||
- TimeScaleShaker.Update()在下一帧才执行
|
||||
- 其他Feedback的ComputeClipDeltaTime()已经读取了旧的globalTimeScale值
|
||||
|
||||
### 解决方案
|
||||
在TimeScaleModifierAction.OnStart()中,立即应用一次时间缩放(调用ImmediateApplyTimeScale())
|
||||
|
||||
### 修改内容
|
||||
- 文件:TimeScaleModifierAction.cs
|
||||
- 添加:ImmediateApplyTimeScale()方法
|
||||
- 在OnStart()末尾调用:ImmediateApplyTimeScale()
|
||||
|
||||
### 代码
|
||||
```csharp
|
||||
public override void OnStart(FeedbackContext context)
|
||||
{
|
||||
// 原有逻辑...
|
||||
TimeScaleShakeEvent.Trigger(...);
|
||||
|
||||
// 新增:立即应用时间缩放
|
||||
ImmediateApplyTimeScale();
|
||||
}
|
||||
|
||||
private void ImmediateApplyTimeScale()
|
||||
{
|
||||
if (TimeManager.Instance == null) return;
|
||||
|
||||
float t = 0f; // 归一化时间0
|
||||
|
||||
if (globalChannel.active)
|
||||
TimeManager.Instance.globalTimeScale.Value = globalChannel.Evaluate(t);
|
||||
|
||||
if (playerChannel.active)
|
||||
TimeManager.Instance.playerTimeScale.Value = playerChannel.Evaluate(t);
|
||||
|
||||
if (enemyChannel.active)
|
||||
TimeManager.Instance.enemyTimeScale.Value = enemyChannel.Evaluate(t);
|
||||
|
||||
if (alliedChannel.active)
|
||||
TimeManager.Instance.alliedMinionTimeScale.Value = alliedChannel.Evaluate(t);
|
||||
|
||||
if (nonPlayerChannel.active)
|
||||
TimeManager.Instance.nonPlayerTimeScale.Value = nonPlayerChannel.Evaluate(t);
|
||||
}
|
||||
```
|
||||
|
||||
### 效果
|
||||
现在当PerfectDodge播放时:
|
||||
1. TimeScaleModifierAction立即修改globalTimeScale = 0.1
|
||||
2. 同一帧内,其他Feedback能立即读取到0.1
|
||||
3. 所有效果在同一帧内协调生效
|
||||
|
||||
---
|
||||
|
||||
## 🔧 关键修复:ProcessClip的pending分支elapsed计算
|
||||
|
||||
### 问题描述
|
||||
当CameraFOV等Feedback在PerfectDodge播放期间持续处于pending状态时(等待estimatedEndTime满足),它们的elapsed时间会累积。
|
||||
|
||||
当终于进入active状态时,使用了`elapsed = _currentTime - startTime`计算,导致elapsed很大(可能是10秒),然后在active分支中`elapsed >= safeDuration`立即为true,Clip立即结束。
|
||||
|
||||
### 时间线示例
|
||||
```
|
||||
PerfectDodge播放第1帧: _currentTime = 0.016, CameraFOV.pending (estimatedEndTime=10.032)
|
||||
PerfectDodge播放第100帧: _currentTime = 1.6, CameraFOV.pending (estimatedEndTime=11.616)
|
||||
PerfectDodge播放结束时: CameraFOV终于满足estimatedEndTime >= _currentTime
|
||||
elapsed = _currentTime - 0 = 1.6 (或更大)
|
||||
elapsed >= safeDuration(0.2) 立即为true
|
||||
CameraFOV.OnEnd()立即被触发!
|
||||
```
|
||||
|
||||
### 解决方案
|
||||
在pending->active分支中,将`elapsed = _currentTime - startTime`改为`elapsed = 0f`。
|
||||
|
||||
### 修改内容
|
||||
- 文件:FeedbackPlayer.cs
|
||||
- 位置:ProcessClip方法的pending分支
|
||||
- 修改:将`elapsed = _currentTime - clip.startTime`改为`elapsed = 0f`
|
||||
|
||||
### 代码
|
||||
```csharp
|
||||
case ClipState.Pending:
|
||||
if (_currentTime >= clip.startTime)
|
||||
{
|
||||
clipState = ClipState.Active;
|
||||
// 关键修复:当Clip进入active状态时,elapsed应该从0开始
|
||||
elapsed = 0f;
|
||||
// ...
|
||||
}
|
||||
break;
|
||||
```
|
||||
|
||||
### 效果
|
||||
- Clip进入active状态时,elapsed从0开始
|
||||
- 不会被之前累积的_currentTime影响
|
||||
- Clip的持续时间正确
|
||||
|
||||
---
|
||||
|
||||
## 📝 待办事项清单
|
||||
|
||||
- [ ] 在Unity编辑器中配置Player_Feedback_Dash.asset
|
||||
- [ ] 在Unity编辑器中配置Player_Feedback_Dodge.asset
|
||||
- [ ] 在Unity编辑器中配置Player_Feedback_NormalDodge.asset
|
||||
- [ ] 在Unity编辑器中配置Player_Feedback_PerfectDodge.asset
|
||||
- [ ] 在Player Prefab中关联所有FeedbackData
|
||||
- [ ] 测试Dash反馈
|
||||
- [ ] 测试Dodge反馈
|
||||
- [ ] 测试NormalDodge反馈
|
||||
- [ ] 测试PerfectDodge反馈
|
||||
- [ ] 根据手感调整参数
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
*状态: 代码已完成,待编辑器配置*
|
||||
701
docs/闪避反馈系统设计.md
701
docs/闪避反馈系统设计.md
@@ -1,701 +0,0 @@
|
||||
# Cielonos 闪避系统摄像机反馈设计方案
|
||||
|
||||
## 一、现有系统分析
|
||||
|
||||
### 1.1 反馈系统架构
|
||||
|
||||
```
|
||||
FeedbackManager
|
||||
↓
|
||||
FeedbackPlayer(运行时播放器)
|
||||
↓
|
||||
FeedbackData(ScriptableObject - 包含多个Track)
|
||||
↓
|
||||
FeedbackTrack(轨道 - 并行播放)
|
||||
↓
|
||||
FeedbackClip(片段 - 包含FeedbackAction)
|
||||
↓
|
||||
FeedbackActionBase(具体的反馈动作)
|
||||
├── CameraRotationShakeAction ✓
|
||||
├── CameraFieldOfViewAction ✓
|
||||
├── CameraPositionShakeAction ✓
|
||||
├── RadialBlurAction ✓
|
||||
├── VignetteAction ✓
|
||||
├── TimeScaleModifierAction ✓
|
||||
├── ChromaticAberrationAction ✓
|
||||
└── ... 其他后处理效果
|
||||
```
|
||||
|
||||
### 1.2 闪避系统架构
|
||||
|
||||
```
|
||||
DodgeSubmodule
|
||||
├── DodgeSource[](闪避源列表)
|
||||
│ ├── dodgeTime(闪避持续时间)
|
||||
│ ├── perfectTime(完美闪避窗口,0.2秒)
|
||||
│ ├── isPerfectDodging(是否处于完美闪避中)
|
||||
│ └── 回调方法
|
||||
└── 方法
|
||||
├── ApplyDodge()
|
||||
├── RemoveDodge()
|
||||
├── PerfectDodge() → 触发"PerfectDodge"反馈
|
||||
└── NormalDodge() → 触发"NormalDodge"反馈
|
||||
|
||||
PlayerAnimationSubcontroller
|
||||
├── SetupDash() → 触发"Dash"反馈
|
||||
└── SetupDodge() → 触发"Dodge"反馈
|
||||
```
|
||||
|
||||
### 1.3 现有的闪避反馈
|
||||
|
||||
在 `DodgeSource.Default()` 工厂方法中,已经预设了:
|
||||
- **PerfectDodge** 触发:
|
||||
- `MMF_RadialBlur` - 径向模糊
|
||||
- `MMF_AdvancedVignette` - 高级暗角
|
||||
- **Dash/Dodge** 触发:
|
||||
- `MMF_CinemachineRotation` - 旋转震动
|
||||
- `MMF_RadialBlur` - 径向模糊
|
||||
|
||||
---
|
||||
|
||||
## 二、闪避反馈设计方案
|
||||
|
||||
### 2.1 普通闪避(Dash & Dodge)的摄像机反馈
|
||||
|
||||
#### 设计目标
|
||||
- **Dash(冲刺)**:强调速度感、移动感、动态感
|
||||
- **Dodge(后撤步)**:强调突然性、灵活性、敏捷感
|
||||
|
||||
#### Dash(冲刺)的反馈设计
|
||||
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **FOV变化** | +8° → 0°(0.3秒) | 冲刺时视野扩大,增强速度感 |
|
||||
| **旋转震动** | X:2° Y:1° Z:3°(0.2秒) | 轻微旋转,增加动态感 |
|
||||
| **径向模糊** | 中心扩散(0.25秒) | 运动模糊效果,增强速度感知 |
|
||||
| **色调(可选)** | 轻微偏蓝(0.2秒) | 冷色调增强速度感 |
|
||||
|
||||
#### Dodge(后撤步)的反馈设计
|
||||
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **FOV变化** | +5° → 0°(0.2秒) | 轻微扩大,比Dash弱 |
|
||||
| **旋转震动** | X:1° Y:0.5° Z:1.5°(0.15秒) | 比Dash更轻微 |
|
||||
| **径向模糊** | 中心扩散(0.15秒) | 比Dash更短促 |
|
||||
| **色调(可选)** | 轻微偏青(0.15秒) | 青色增强灵活感 |
|
||||
|
||||
### 2.2 完美闪避(Perfect Dodge)的摄像机反馈
|
||||
|
||||
#### 设计目标
|
||||
- **强调**:时机感、成就感、满足感
|
||||
- **核心**:时间扭曲 + 视觉强化 + 中心聚焦
|
||||
|
||||
#### Perfect Dodge 的完整反馈设计
|
||||
|
||||
##### 1. 时间扭曲效果
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **时间缩放** | 0.3x → 1.0x(0.3秒) | 瞬间慢动作,然后快速恢复 |
|
||||
| **曲线** | 先慢后快(EaseInOut) | 自然恢复 |
|
||||
|
||||
##### 2. 中心聚焦效果
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **暗角强化** | 强度 0.5 → 0.2(0.4秒) | 聚焦中心,增强紧张感 |
|
||||
| **暗角中心** | 偏移到攻击来源方向 | 视觉引导 |
|
||||
| **色调偏移** | 轻微偏蓝(0.2秒) | 冷色调增强冷静感 |
|
||||
|
||||
##### 3. 运动模糊效果
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **径向模糊强化** | 中心到边缘(0.2秒) | 强烈的速度感 |
|
||||
| **模糊强度** | 0.8 → 0.0(0.3秒) | 快速衰减 |
|
||||
|
||||
##### 4. 色散效果
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **色差(Chromatic Aberration)** | RGB分离 0.3 → 0.0(0.25秒) | 增强视觉冲击 |
|
||||
| **分离中心** | 攻击来源方向 | 动态分离 |
|
||||
|
||||
##### 5. 相机震动
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **旋转震动** | X:3° Y:2° Z:5°(0.3秒) | 比普通闪避更强 |
|
||||
| **震动曲线** | QuickImpact(快速冲击) | 即时峰值,快速衰减 |
|
||||
|
||||
##### 6. 屏幕特效
|
||||
| 效果类型 | 参数配置 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **屏幕闪光** | 中心白闪光(0.1秒) | 瞬间高亮 |
|
||||
| **Bloom强化** | 强度+0.5(0.2秒) | 增强发光效果 |
|
||||
|
||||
#### 完美闪避反馈时间线
|
||||
|
||||
```
|
||||
时间(秒): 0.0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4
|
||||
─────────────────────────────────────────────────────────────────
|
||||
时间缩放 ████▓▒▒░░░░
|
||||
0.3x → 1.0x
|
||||
|
||||
FOV ▓▓▓▒▒░░░░░
|
||||
+8° → 0°
|
||||
|
||||
径向模糊 ██████▓▒░░░
|
||||
强度0.8 → 0.0
|
||||
|
||||
暗角 ▓▓▓▓▓▒▒░░░
|
||||
强度0.5 → 0.2
|
||||
|
||||
色差 ████████░░░
|
||||
分离0.3 → 0.0
|
||||
|
||||
屏幕闪光 ██░░░░░░░░░
|
||||
瞬间
|
||||
|
||||
相机震动 █████▓▒░░░░
|
||||
3°旋转
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、需要创建/完善的反馈组件
|
||||
|
||||
### 3.1 现有组件(可直接使用)
|
||||
|
||||
| 组件 | 状态 | 用途 |
|
||||
|------|------|------|
|
||||
| CameraRotationShakeAction | ✅ 已存在 | 相机旋转震动 |
|
||||
| CameraFieldOfViewAction | ✅ 已存在 | FOV变化 |
|
||||
| CameraPositionShakeAction | ✅ 已存在 | 相机位置震动 |
|
||||
| RadialBlurAction | ✅ 已存在 | 径向模糊 |
|
||||
| VignetteAction | ✅ 已存在 | 暗角效果 |
|
||||
| ChromaticAberrationAction | ✅ 已存在 | 色差效果 |
|
||||
| TimeScaleModifierAction | ✅ 已存在 | 时间缩放 |
|
||||
|
||||
### 3.2 需要创建的新组件
|
||||
|
||||
#### 1. MotionBlurAction(运动模糊)
|
||||
**优先级**:P0 - 必须
|
||||
|
||||
**功能**:
|
||||
- 控制运动模糊效果(SpeedLines或MotionBlur后处理)
|
||||
- 支持模糊强度、方向、中心点控制
|
||||
|
||||
**参数**:
|
||||
```csharp
|
||||
public class MotionBlurAction : CurveShakeAction
|
||||
{
|
||||
public bool modifyDirection; // 是否修改方向
|
||||
public Vector2 direction; // 模糊方向
|
||||
|
||||
public bool modifyStrength; // 是否修改强度
|
||||
public float strengthMin; // 最小模糊强度
|
||||
public float strengthMax; // 最大模糊强度
|
||||
|
||||
public bool modifySamples; // 是否修改采样数
|
||||
public int samplesMin; // 最小采样数
|
||||
public int samplesMax; // 最大采样数
|
||||
}
|
||||
```
|
||||
|
||||
#### 2. ScreenFlashAction(屏幕闪光)
|
||||
**优先级**:P1 - 重要
|
||||
|
||||
**功能**:
|
||||
- 控制屏幕中心的白闪光效果
|
||||
- 支持颜色、强度、衰减速度控制
|
||||
|
||||
**参数**:
|
||||
```csharp
|
||||
public class ScreenFlashAction : FeedbackActionBase
|
||||
{
|
||||
[Title("Flash Settings")]
|
||||
public Color flashColor = Color.white;
|
||||
public float maxIntensity = 1.0f;
|
||||
public AnimationCurve fadeCurve; // 衰减曲线
|
||||
|
||||
public bool useCenterOffset; // 是否使用中心偏移
|
||||
public Vector2 centerOffset; // 中心偏移
|
||||
|
||||
public bool affectBloom; // 是否影响Bloom
|
||||
public float bloomIntensity = 0.5f;
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. ColorGradeAction(色调调整)
|
||||
**优先级**:P2 - 可选
|
||||
|
||||
**功能**:
|
||||
- 动态调整画面色调
|
||||
- 支持色温、色调、对比度调整
|
||||
|
||||
**参数**:
|
||||
```csharp
|
||||
public class ColorGradeAction : FeedbackActionBase
|
||||
{
|
||||
public bool modifyTemperature; // 是否修改色温
|
||||
public float temperatureMin; // 冷色调(负值)
|
||||
public float temperatureMax; // 暖色调(正值)
|
||||
|
||||
public bool modifyTint; // 是否修改色调
|
||||
public Color tintColor; // 色调颜色
|
||||
|
||||
public bool modifySaturation; // 是否修改饱和度
|
||||
public float saturationOffset; // 饱和度偏移
|
||||
}
|
||||
```
|
||||
|
||||
#### 4. SpeedLinesAction(速度线)
|
||||
**优先级**:P1 - 重要
|
||||
|
||||
**功能**:
|
||||
- 控制屏幕边缘的速度线效果
|
||||
- 增强速度感和动态感
|
||||
|
||||
**参数**:
|
||||
```csharp
|
||||
public class SpeedLinesAction : CurveShakeAction
|
||||
{
|
||||
[Title("Speed Lines Settings")]
|
||||
public bool modifyCount; // 是否修改线条数量
|
||||
public int countMin; // 最小线条数
|
||||
public int countMax; // 最大线条数
|
||||
|
||||
public bool modifyLength; // 是否修改线条长度
|
||||
public float lengthMin; // 最小长度
|
||||
public float lengthMax; // 最大长度
|
||||
|
||||
public bool modifyOpacity; // 是否修改不透明度
|
||||
public float opacityMin; // 最小不透明度
|
||||
public float opacityMax; // 最大不透明度
|
||||
|
||||
public bool modifyCenter; // 是否修改中心
|
||||
public Vector2 center; // 中心点
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、实现计划
|
||||
|
||||
### 4.1 Phase 1: 普通闪避反馈(1天)
|
||||
|
||||
#### 目标
|
||||
实现 Dash 和 Dodge 的基本摄像机反馈
|
||||
|
||||
#### 任务
|
||||
1. [ ] **创建/配置 Dash FeedbackData**
|
||||
- 名称:`DodgeDash`
|
||||
- Track 1: "Camera" - CameraFieldOfViewAction
|
||||
- FOV: +8° → 0°(0.3秒)
|
||||
- Track 2: "Camera" - CameraRotationShakeAction
|
||||
- Rotation: (2°, 1°, 3°)
|
||||
- Curve: SmoothBump
|
||||
- Track 3: "PostProcess" - RadialBlurAction
|
||||
- Intensity: 0.3 → 0.0(0.25秒)
|
||||
|
||||
2. [ ] **创建/配置 Dodge FeedbackData**
|
||||
- 名称:`DodgeBackstep`
|
||||
- Track 1: "Camera" - CameraFieldOfViewAction
|
||||
- FOV: +5° → 0°(0.2秒)
|
||||
- Track 2: "Camera" - CameraRotationShakeAction
|
||||
- Rotation: (1°, 0.5°, 1.5°)
|
||||
- Curve: QuickImpact
|
||||
- Track 3: "PostProcess" - RadialBlurAction
|
||||
- Intensity: 0.2 → 0.0(0.15秒)
|
||||
|
||||
3. [ ] **修改 PlayerAnimationSubcontroller**
|
||||
- SetupDash() 使用新的"DodgeDash" FeedbackData
|
||||
- SetupDodge() 使用新的"DodgeBackstep" FeedbackData
|
||||
|
||||
4. [ ] **测试调整**
|
||||
- 根据实际效果调整参数
|
||||
- 确保Dash和Dodge有明显区别
|
||||
|
||||
### 4.2 Phase 2: 完美闪避反馈(1-2天)
|
||||
|
||||
#### 目标
|
||||
实现 Perfect Dodge 的特殊摄像机反馈
|
||||
|
||||
#### 任务
|
||||
1. [ ] **创建 ScreenFlashAction(如果尚未实现)**
|
||||
- 屏幕中心白闪光
|
||||
- 快速衰减
|
||||
|
||||
2. [ ] **创建 MotionBlurAction(如果尚未实现)**
|
||||
- 运动模糊效果
|
||||
- 支持方向和强度控制
|
||||
|
||||
3. [ ] **创建/配置 Perfect Dodge FeedbackData**
|
||||
- 名称:`PerfectDodge`
|
||||
|
||||
- Track 1: "Time" - TimeScaleModifierAction
|
||||
- Mode: Dynamic
|
||||
- Curve: Custom(0.3x → 1.0x)
|
||||
- Duration: 0.3秒
|
||||
|
||||
- Track 2: "Camera" - CameraFieldOfViewAction
|
||||
- FOV: +8° → 0°(0.3秒)
|
||||
|
||||
- Track 3: "Camera" - CameraRotationShakeAction
|
||||
- Rotation: (3°, 2°, 5°)
|
||||
- Curve: QuickImpact
|
||||
- Duration: 0.3秒
|
||||
|
||||
- Track 4: "PostProcess" - VignetteAction
|
||||
- Intensity: 0.5 → 0.2(0.4秒)
|
||||
- 中心偏移到攻击来源
|
||||
|
||||
- Track 5: "PostProcess" - RadialBlurAction
|
||||
- Intensity: 0.8 → 0.0(0.3秒)
|
||||
|
||||
- Track 6: "PostProcess" - ChromaticAberrationAction
|
||||
- Intensity: 0.3 → 0.0(0.25秒)
|
||||
|
||||
- Track 7: "Effect" - ScreenFlashAction
|
||||
- Color: White
|
||||
- Intensity: 1.0 → 0.0(0.1秒)
|
||||
|
||||
- Track 8: "Effect" - BloomEnhanceAction(可选)
|
||||
- Intensity: +0.5(0.2秒)
|
||||
|
||||
4. [ ] **修改 DodgeSource.Default() 工厂方法**
|
||||
- 更新 PerfectDodge 回调逻辑
|
||||
- 确保所有反馈正确触发
|
||||
|
||||
5. [ ] **测试调整**
|
||||
- 调整时间曲线
|
||||
- 确保慢动作效果明显
|
||||
- 优化视觉效果
|
||||
|
||||
### 4.3 Phase 3: 优化和细节(1天)
|
||||
|
||||
#### 目标
|
||||
完善细节,提升品质
|
||||
|
||||
#### 任务
|
||||
1. [ ] **添加速度线效果(SpeedLines)**
|
||||
- 冲刺时显示速度线
|
||||
- 增强速度感
|
||||
|
||||
2. [ ] **添加色调调整(可选)**
|
||||
- Dash: 冷色调(蓝)
|
||||
- Dodge: 青色(青绿)
|
||||
- Perfect Dodge: 偏蓝
|
||||
|
||||
3. [ ] **创建编辑器预览工具**
|
||||
- 在Editor中预览闪避效果
|
||||
- 快速调整参数
|
||||
|
||||
4. [ ] **性能优化**
|
||||
- 确保反馈系统不会造成性能问题
|
||||
- 优化后处理效果
|
||||
|
||||
5. [ ] **创建反馈预设库**
|
||||
- Dash_Powerful(强力冲刺)
|
||||
- Dash_Light(轻盈冲刺)
|
||||
- Dodge_Quick(快速后撤)
|
||||
- Dodge_Strong(强力后撤)
|
||||
- PerfectDodge_Time(时间扭曲型)
|
||||
- PerfectDodge_Impact(冲击型)
|
||||
|
||||
---
|
||||
|
||||
## 五、参数配置建议
|
||||
|
||||
### 5.1 Dash(冲刺)
|
||||
|
||||
```csharp
|
||||
// DodgeDash FeedbackData
|
||||
{
|
||||
// FOV
|
||||
FOV Offset: +8°
|
||||
FOV Duration: 0.3s
|
||||
FOV Curve: EaseOut
|
||||
|
||||
// Rotation Shake
|
||||
Rotation: (2°, 1°, 3°)
|
||||
Duration: 0.2s
|
||||
Curve: SmoothBump
|
||||
|
||||
// Radial Blur
|
||||
Intensity: 0.3
|
||||
Duration: 0.25s
|
||||
Center: Dynamic (player screen position)
|
||||
}
|
||||
```
|
||||
|
||||
### 5.2 Dodge(后撤步)
|
||||
|
||||
```csharp
|
||||
// DodgeBackstep FeedbackData
|
||||
{
|
||||
// FOV
|
||||
FOV Offset: +5°
|
||||
FOV Duration: 0.2s
|
||||
FOV Curve: EaseOut
|
||||
|
||||
// Rotation Shake
|
||||
Rotation: (1°, 0.5°, 1.5°)
|
||||
Duration: 0.15s
|
||||
Curve: QuickImpact
|
||||
|
||||
// Radial Blur
|
||||
Intensity: 0.2
|
||||
Duration: 0.15s
|
||||
Center: Dynamic (player screen position)
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 Perfect Dodge
|
||||
|
||||
```csharp
|
||||
// PerfectDodge FeedbackData
|
||||
{
|
||||
// Time Scale
|
||||
Time Scale: 0.3x → 1.0x
|
||||
Duration: 0.3s
|
||||
Curve: EaseInOut
|
||||
|
||||
// FOV
|
||||
FOV Offset: +10°
|
||||
FOV Duration: 0.4s
|
||||
FOV Curve: EaseOut
|
||||
|
||||
// Rotation Shake
|
||||
Rotation: (3°, 2°, 5°)
|
||||
Duration: 0.3s
|
||||
Curve: QuickImpact
|
||||
|
||||
// Vignette
|
||||
Intensity: 0.5 → 0.2
|
||||
Duration: 0.4s
|
||||
Center Offset: Attack direction
|
||||
|
||||
// Radial Blur
|
||||
Intensity: 0.8 → 0.0
|
||||
Duration: 0.3s
|
||||
Center: Dynamic
|
||||
|
||||
// Chromatic Aberration
|
||||
Intensity: 0.3 → 0.0
|
||||
Duration: 0.25s
|
||||
|
||||
// Screen Flash
|
||||
Color: White
|
||||
Intensity: 1.0 → 0.0
|
||||
Duration: 0.1s
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、实现建议
|
||||
|
||||
### 6.1 创建流程
|
||||
|
||||
1. **创建 FeedbackData**
|
||||
- 在 `Resources/Feedbacks/` 目录下创建
|
||||
- 命名为 `DodgeDash.asset`, `DodgeBackstep.asset`, `PerfectDodge.asset`
|
||||
|
||||
2. **配置 FeedbackTracks**
|
||||
- 为每个效果创建独立的 Track
|
||||
- 建议 Track 命名:
|
||||
- "Camera" - 相机相关效果
|
||||
- "PostProcess" - 后处理效果
|
||||
- "Effect" - 特殊效果
|
||||
- "Time" - 时间控制
|
||||
|
||||
3. **添加 FeedbackClips**
|
||||
- 在每个 Track 中添加 Clip
|
||||
- 配置时间范围
|
||||
- 选择对应的 FeedbackAction
|
||||
|
||||
4. **配置 FeedbackAction 参数**
|
||||
- 根据设计文档调整参数
|
||||
- 使用预设曲线
|
||||
- 设置正确的持续时间
|
||||
|
||||
5. **在代码中引用**
|
||||
- 在 `PlayerAnimationSubcontroller` 中引用 FeedbackData
|
||||
- 在 `DodgeSource` 中配置 PerfectDodge 回调
|
||||
|
||||
### 6.2 代码修改建议
|
||||
|
||||
#### DodgeSource.Default() 工厂方法修改
|
||||
|
||||
```csharp
|
||||
public static DodgeSource Default(CharacterBase sourceCharacter, float duration = Mathf.Infinity)
|
||||
{
|
||||
DodgeSource defaultDodge = new DodgeSource(
|
||||
sourceCharacter, null, "DefaultDodge", 0,
|
||||
"NormalDodge", "PerfectDodge", duration, 0.2f
|
||||
);
|
||||
|
||||
if (sourceCharacter is Player player)
|
||||
{
|
||||
// 普通闪避反馈
|
||||
defaultDodge.onNormalDodge = () =>
|
||||
{
|
||||
// 可以根据闪避类型(Dash/Dodge)播放不同的反馈
|
||||
// player.feedbackSc["NormalDodge"].Play();
|
||||
};
|
||||
|
||||
// 完美闪避反馈
|
||||
defaultDodge.onPerfectDodge = () =>
|
||||
{
|
||||
// 更新效果中心点
|
||||
var radialBlur = player.feedbackSc["PerfectDodge"].feedback
|
||||
.GetFeedbackOfType<RadialBlurAction>();
|
||||
if (radialBlur != null)
|
||||
{
|
||||
radialBlur.modifyCenter = true;
|
||||
radialBlur.center = player.GetNormalizedScreenPosition();
|
||||
}
|
||||
|
||||
var vignette = player.feedbackSc["PerfectDodge"].feedback
|
||||
.GetFeedbackOfType<VignetteAction>();
|
||||
if (vignette != null)
|
||||
{
|
||||
vignette.modifyCenter = true;
|
||||
vignette.center = player.GetNormalizedScreenPosition();
|
||||
}
|
||||
|
||||
// 播放完美闪避反馈
|
||||
player.feedbackSc["PerfectDodge"].Play();
|
||||
|
||||
Debug.Log("Perfect Dodge!");
|
||||
};
|
||||
}
|
||||
return defaultDodge;
|
||||
}
|
||||
```
|
||||
|
||||
#### PlayerAnimationSubcontroller 修改
|
||||
|
||||
```csharp
|
||||
// SetupDash() 中
|
||||
public void SetupDash(Vector3 direction, bool isInputDirection, float length)
|
||||
{
|
||||
if (player.movementSc.canDash && player.movementSc.canDodge &&
|
||||
fullBodyFuncAnimSm.Play("Dash"))
|
||||
{
|
||||
length = length < 0 ? player.attributeSm["DashLength"] : length;
|
||||
float dashMultiplier = length / fullBodyFuncAnimSm.collection["Dash"]
|
||||
.variableCollection.GetVariable<float>("RootMoveZ");
|
||||
player.landMovementSc.dashMoveMultiplier = dashMultiplier;
|
||||
|
||||
// 根据方向计算相机旋转
|
||||
Vector3 cameraForward = player.viewSc.playerCamera.transform.forward.Flatten();
|
||||
Vector3 dashCameraRotation;
|
||||
if (isInputDirection)
|
||||
{
|
||||
player.landMovementSc.TurnToInputDirection(direction);
|
||||
Vector3 playerForward = player.transform.forward.Flatten();
|
||||
dashCameraRotation = CalculateDashAngles(playerForward, cameraForward);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.landMovementSc.TurnToDirection(direction, 0f);
|
||||
dashCameraRotation = CalculateDashAngles(direction, cameraForward);
|
||||
}
|
||||
|
||||
// 配置动态参数
|
||||
var rotationShake = player.feedbackSc["DodgeDash"].feedback
|
||||
.GetFeedbackOfType<CameraRotationShakeAction>();
|
||||
if (rotationShake != null)
|
||||
{
|
||||
rotationShake.directionSettings.targetDirection = direction;
|
||||
}
|
||||
|
||||
// 播放 Dash 反馈
|
||||
player.feedbackSc["DodgeDash"].Play();
|
||||
}
|
||||
}
|
||||
|
||||
// SetupDodge() 中
|
||||
public void SetupDodge(float length)
|
||||
{
|
||||
if (player.movementSc.canDodge && fullBodyFuncAnimSm.Play("Dodge"))
|
||||
{
|
||||
length = length < 0 ? player.attributeSm["DodgeLength"] : length;
|
||||
float dashMultiplier = length / fullBodyFuncAnimSm.collection["Dodge"]
|
||||
.variableCollection.GetVariable<float>("RootMoveZ");
|
||||
player.landMovementSc.dashMoveMultiplier = dashMultiplier;
|
||||
|
||||
// 配置动态参数
|
||||
var rotationShake = player.feedbackSc["DodgeBackstep"].feedback
|
||||
.GetFeedbackOfType<CameraRotationShakeAction>();
|
||||
if (rotationShake != null)
|
||||
{
|
||||
rotationShake.directionSettings.targetDirection = -player.transform.forward.Flatten();
|
||||
}
|
||||
|
||||
// 播放 Dodge 反馈
|
||||
player.feedbackSc["DodgeBackstep"].Play();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、测试清单
|
||||
|
||||
### 7.1 功能测试
|
||||
|
||||
- [ ] Dash 反馈正常播放
|
||||
- [ ] Dodge 反馈正常播放
|
||||
- [ ] Perfect Dodge 反馈正常播放
|
||||
- [ ] 所有效果平滑过渡
|
||||
- [ ] 无视觉抖动或撕裂
|
||||
- [ [ ] 时间缩放正常工作
|
||||
- [ ] 后处理效果正常工作
|
||||
|
||||
### 7.2 性能测试
|
||||
|
||||
- [ ] 60 FPS 稳定运行
|
||||
- [ ] 无内存泄漏
|
||||
- [ ] Feedback 实例正确回收
|
||||
- [ ] 后处理效果不影响性能
|
||||
|
||||
### 7.3 体验测试
|
||||
|
||||
- [ ] Dash 速度感明显
|
||||
- [ ] Dodge 突然性明显
|
||||
- [ ] Perfect Dodge 成就感强烈
|
||||
- [ ] 效果与动作匹配
|
||||
- [ ] 反馈强度适中(不晕眩)
|
||||
|
||||
---
|
||||
|
||||
## 八、后续优化方向
|
||||
|
||||
### 8.1 高级功能
|
||||
|
||||
1. **动态反馈强度**
|
||||
- 根据冲刺距离调整反馈强度
|
||||
- 根据完美闪避时机早晚调整强度
|
||||
|
||||
2. **连闪避加成**
|
||||
- 连续完美闪避时增强反馈
|
||||
- 视觉上越来越夸张
|
||||
|
||||
3. **敌人攻击适配**
|
||||
- 根据攻击类型调整反馈
|
||||
- 重攻击有更强的反馈
|
||||
|
||||
### 8.2 辅助功能
|
||||
|
||||
1. **难度设置**
|
||||
- 新手模式:增强反馈提示
|
||||
- 高手模式:减少辅助反馈
|
||||
|
||||
2. **无障碍选项**
|
||||
- 减少运动模糊
|
||||
- 减少时间缩放
|
||||
- 减少屏幕效果
|
||||
|
||||
---
|
||||
|
||||
*文档生成日期: 2026-04-17*
|
||||
*生成者: Game Designer Agent*
|
||||
Reference in New Issue
Block a user