多轮审查和修复
This commit is contained in:
@@ -57,7 +57,7 @@ Week 9: EnemyBase 子类:RangedEnemy(远程)+ FlyingEnemy(飞行巡逻
|
||||
|
||||
---
|
||||
|
||||
## 2. Week 5:玩家 FSM 完整扩展
|
||||
## 2. Week 5:玩家 FSM 完整扩展 ✅ 完成(2026-05-12)
|
||||
|
||||
**参考文档**:`05_PlayerModule.md §2`
|
||||
|
||||
@@ -525,10 +525,32 @@ public partial class PlayerController : MonoBehaviour, IPoiseSource
|
||||
|
||||
---
|
||||
|
||||
## 3. Week 6:护盾 + 弹反 + 战斗深化
|
||||
## 3. Week 6:护盾 + 弹反 + 战斗深化 ✅ 完成(2026-05-10)
|
||||
|
||||
**参考文档**:`06_CombatModule.md §8-13`、`20_ShieldModule.md`
|
||||
|
||||
> **实现摘要**(与原计划的实际偏差):
|
||||
> - `ShieldConfigSO` 放在 `BaseGames.Combat` 命名空间(非 `BaseGames.Player.Shield`),统一管理
|
||||
> - `ShieldComponent` 新增 `FullRecharge()` / `OnParrySuccess()` / `_brokenPenaltyTimer` / 可选 `ShieldConfigSO` 覆盖
|
||||
> - `ParrySystem` 使用 **C# 事件**(`OnParryActivated` / `OnParryConsumed`)替代 `ForceState(PlayerStateType.Parry)` 强制转换,避免 Parry 程序集引用 Player.States 程序集
|
||||
> - `ParryInfo` 结构体仅含 `IsPerfect` + `SoulGained`(去掉 `DamageInfo OriginalDamage` 字段,保持 Parry 不引用 Combat 的程序集约束)
|
||||
> - `PlayerController.Awake()` 新增订阅 `ParrySystem.OnParryActivated`(转 ParryState)和 `OnParryConsumed`(发放灵力+恢复护盾),`OnDestroy()` 解订阅
|
||||
> - `BaseGames.Parry.asmdef` 新增引用:`BaseGames.Input`、`BaseGames.Core.Events`
|
||||
|
||||
**完成文件清单**:
|
||||
```
|
||||
新建:Assets/Scripts/Combat/ShieldConfigSO.cs
|
||||
新建:Assets/Scripts/Combat/PoiseWindowConfig.cs
|
||||
新建:Assets/Scripts/Parry/ParryConfigSO.cs
|
||||
新建:Assets/Scripts/Parry/ParryInfo.cs
|
||||
新建:Assets/Scripts/Parry/ParryInfoEventChannelSO.cs
|
||||
新建:Assets/Scripts/Enemies/EnemyPoiseComponent.cs
|
||||
修改:Assets/Scripts/Combat/ShieldComponent.cs(FullRecharge/OnParrySuccess/破碎惩罚/ShieldConfigSO)
|
||||
修改:Assets/Scripts/Parry/ParrySystem.cs(5 阶段状态机完整重写)
|
||||
修改:Assets/Scripts/Player/States/PlayerController.cs(订阅 ParrySystem 事件)
|
||||
修改:Assets/Scripts/Parry/BaseGames.Parry.asmdef(新增 Input + Core.Events 引用)
|
||||
```
|
||||
|
||||
### 3.0 护盾数据层 SO 与接口
|
||||
|
||||
```csharp
|
||||
@@ -1125,10 +1147,38 @@ public class BreakableProp : MonoBehaviour, IBreakable
|
||||
|
||||
---
|
||||
|
||||
## 4. Week 7:状态效果 + 动画事件 + 完整 VFX
|
||||
## 4. Week 7:状态效果 + 动画事件 + 完整 VFX ✅ 代码完成(2026-05-13,VFX 资产填充仅需 Unity 编辑器)
|
||||
|
||||
**当前状态**:✅ 完成(2026-05-11)
|
||||
**参考文档**:`06_CombatModule.md §10-11`、`16_AnimationModule.md`、`18_VFXFeedbackModule.md`
|
||||
|
||||
**已实施内容**:
|
||||
1. ✅ **动画事件骨架**:`AnimationEventType.cs`(**21 种事件类型**)、`IAnimationEventHandler.cs`(接口)、`AnimationEventConfigSO.cs`(SO 资产 + 时间线编辑支持)、`AnimationEventBinder.cs`(Animancer SetCallback 注入)
|
||||
2. ✅ **状态效果系统**:`StatusEffectType.cs`(枚举,含 Stagger 扩展项)、`StatusEffect.cs`(抽象基类,非 StatusEffectBase)、`FireEffect.cs`(DoT,不可叠加,**3s/0.5s/1dmg True**,含 `_FireGlow` Shader)、`PoisonEffect.cs`(DoT,3层叠加,**5s/1s/StackCount dmg True**,含 `_PoisonGlow` Shader)、`StaggerEffect.cs`(硬直,架构扩展)、`StatusEffectEventChannelSO.cs`(SO 事件频道)
|
||||
3. ✅ **StatusEffectManager 完整重写**:双结构(List + Dictionary)、O(1) 查找、`ApplyDirectDamage(DamageInfo)` via IDamageable、`SetShaderParam(string,float)` via MaterialPropertyBlock、`CleanseEffect`/`CleanseAll`、`HasEffect` 查询、SO 事件广播、SpriteRenderer + MaterialPropertyBlock Awake 初始化
|
||||
4. ✅ **动画事件接线**:`PlayerAnimationEvents.cs`(含 HitBox.Id 按名精确激活、ParrySystem.OpenParryWindow/CloseParryWindow、CancelWindowOpen、IFrame、Feedback)、`EnemyAnimationEvents.cs`(含 SpawnProjectile、SetRoaring、TriggerPhaseTwo、OnAnimationComplete)
|
||||
5. ✅ **编辑器工具**:`EventConfigEditor.cs`(时间线色块预览 + 归一化时间验证 + Clip 长度漂移检测 + 排序按钮)
|
||||
6. ✅ **依赖修改**:`BaseGames.Animation.asmdef` 添加 Combat/Parry/Feedback/Player/Enemies 引用;`BaseGames.Combat.StatusEffects.asmdef` 添加 Core.Events 引用;`BaseGames.Editor.asmdef` 添加 Animation 引用
|
||||
7. ✅ **HitBox.Id** 属性新增(`[SerializeField] private string _id`)
|
||||
8. ✅ **EnemyBase** 虚方法:`SpawnProjectile`、`TriggerPhaseTwo`、`OnAnimationComplete`、`SetRoaring`
|
||||
|
||||
**注**:FootstepSystem(计划 §4.1.2)为 Footstep 事件留了占位(不调用任何实现),待音频模块阶段(`FootstepCatalogSO` + Addressables 异步加载)完整实现。
|
||||
|
||||
**架构差异注记(已验证 2026-05-11)**:
|
||||
- **ParrySystem 方法名**:架构 24 §5 代码示例写的是 `OpenWindow()`/`CloseWindow()`,实际 ParrySystem API(06 §8)为 `OpenParryWindow()`/`CloseParryWindow()`,代码已按正确 API 实现
|
||||
- **StatusEffectType 枚举**:架构 §11 定义 4 值 {Fire, Poison, Freeze, Stun},实现额外添加 `Stagger` 作为硬直扩展
|
||||
- **StatusEffectEventChannelSO**:架构期望广播 `StatusEffectType` 直接值,实现扩展为包含 StackCount/RemainingDuration 的 `StatusEffectEvent` struct(UI 更方便)
|
||||
- **EnemyAnimationEvents RoarStart/RoarEnd**:架构展示 `_enemy.Blackboard.SetVariableValue()` 直接调用,实现抽象为 `EnemyBase.SetRoaring(bool)` 虚方法(避免 Animation 程序集依赖 BehaviorDesigner)
|
||||
|
||||
**实施优先级**(建议顺序):
|
||||
1. **动画事件骨架**:`AnimationEventType` 枚举 → `AnimationEventConfigSO` → `AnimationEventBinder` → `IAnimationEventHandler`
|
||||
2. **状态效果系统**:`StatusEffect` 抽象基类 → `FireEffect` / `PoisonEffect` / `StaggerEffect` → `StatusEffectManager`
|
||||
3. **HurtBox 集成**:步骤 8 `_statusEffectable.ApplyStatusEffect(info.Type)` 连接 `StatusEffectManager`
|
||||
4. **动画事件接线**:`PlayerAnimationEvents` + `EnemyAnimationEvents`(含 HitBox 激活时机改为 AnimEvent 驱动)
|
||||
5. **编辑器工具**:`EventConfigEditor`(时间轴可视化 + Clip 漂移检测)
|
||||
|
||||
> **汇编约束**:`BaseGames.Animation` 程序集需引用 `BaseGames.Combat`(PlayerAnimationEvents 访问 HitBox/HurtBox)和 `BaseGames.Parry`(AnimEvent 驱动 ParrySystem.OpenParryWindow/CloseParryWindow;注意架构文档示例写的是 OpenWindow/CloseWindow,以实际 API 为准)。
|
||||
|
||||
### 4.1 AnimationEventType 枚举 + AnimationEventBinder
|
||||
|
||||
**参考文档**:`24_AnimEventModule.md §2-4`
|
||||
@@ -2117,7 +2167,7 @@ namespace BaseGames.VFX
|
||||
|
||||
---
|
||||
|
||||
## 5. Week 8:难度系统 + AudioMixer 快照
|
||||
## 5. Week 8:难度系统 + AudioMixer 快照 ✅ 完成(2026-05-10)
|
||||
|
||||
**参考文档**:`11_AudioModule.md §3-5`、`19_DifficultyModule.md §4`
|
||||
|
||||
@@ -2416,7 +2466,7 @@ namespace BaseGames.Core
|
||||
|
||||
---
|
||||
|
||||
## 6. Week 9:敌人扩展 + BossBase 骨架
|
||||
## 6. Week 9:敌人扩展 + BossBase 骨架 ✅ 完成(2026-05-10)
|
||||
|
||||
**参考文档**:`07_EnemyModule.md §3-5`
|
||||
|
||||
@@ -2759,23 +2809,123 @@ public class DeathShade : MonoBehaviour, IInteractable
|
||||
|
||||
## 7. 完成标准检查清单
|
||||
|
||||
> **图例**:`☑` = 代码实现完成(待 Unity 运行时验证)|`□` = 尚未实现
|
||||
|
||||
```
|
||||
□ 冲刺:施加冲刺力 + 无敌帧期间不受伤 + 落地后正确切换 Idle
|
||||
□ 蹬墙:接触墙壁减速下滑 + 蹬墙跳正确方向
|
||||
□ 下劈:空中踩踏敌人时玩家弹起 + 地面撞击 VFX
|
||||
□ 上劈:向上攻击命中敌人 + 上劈后进入 Fall 状态
|
||||
□ 弹反:ParryWindow 内受攻击 → 弹反成功动画 + 敌人僵直
|
||||
□ 护盾:受击时护盾优先吸收 + 护盾耐久条 UI 更新 + 破碎惩罚期间无护盾
|
||||
☑ 冲刺:DashState 实现(施加冲刺力 + 无敌帧)——待 Unity 内验证落地切换 Idle
|
||||
☑ 蹬墙:WallSlideState + WallJumpState 实现——待 Unity 内验证墙面检测与弹跳方向
|
||||
☑ 下劈:DownAttackState 实现(向下速度 + 着地切换 Idle)——待 Unity 内验证踩踏弹跳
|
||||
☑ 上劈:UpAttackState 实现——待 Unity 内验证命中后进入 FallState
|
||||
☑ ParryState 开启弹反窗口——待 ParrySystem 完整实现后验证成功/失败流程
|
||||
☑ ShieldComponent 护盾吸收逻辑实现——待 HurtBox 护盾管道接入 + UI 耐久条
|
||||
□ 状态效果:Poison 每秒掉血 + StatusEffectManager 正确 Tick + 到期自动移除
|
||||
□ AnimationEventType:攻击动画 HitBox 激活时机与动画帧完全同步
|
||||
□ EventConfigEditor:AnimationEventConfigSO Inspector 时间轴可视化正常渲染,Clip 漂移警告触发(偏差>5帧)
|
||||
□ FormController:三形态切换 + 各形态使用对应武器 + 调色板切换
|
||||
□ AudioMixer:BGM 跨房间平滑切换(Snapshot Transition),SFX 无卡顿
|
||||
□ DifficultyManager:Hard 模式敌人 HP 和伤害按 scaler 正确缩放
|
||||
□ RangedEnemy:Projectile 飞行命中玩家,玩家 HP 减少
|
||||
□ BossBase:Phase 切换(HP 降至 50%)动画演出正确触发
|
||||
□ LootResolver:敌人死亡时随机掉落 Geo + 指定道具
|
||||
□ Console 无 Error
|
||||
☑ FormController 三形态切换代码实现——待 Unity 内验证调色板切换与武器对应
|
||||
☑ AudioMixer 快照 API(TransitionToSnapshot)实现——待 Unity 内配置 MainMixer 快照并验证过渡
|
||||
☑ AudioEventSO + GlobalSFXPlayer 代码实现——待 Unity 内填充音效资产并连接 SFX 钩子
|
||||
☑ DifficultyManager + DifficultyScalerSO 代码实现——待 Unity 内创建 4 份 SO 资产并验证 Hard 模式缩放
|
||||
☑ BoolEventChannelSO 实现——供 BossBase._onBossFightEnded 使用
|
||||
☑ RangedEnemy:SpawnProjectile 重写实现——待 Unity 内挂载 ProjectileConfigSO 并验证 Projectile 命中
|
||||
☑ FlyingEnemy:Rigidbody2D MoveTowards 追击 + 接触伤害实现——待 Unity 内验证导航行为
|
||||
☑ BossBase:EnterPhase + IsHPBelow + Die 广播实现——待 Unity 内验证 Phase 切换演出触发
|
||||
☑ LootTableSO + LootResolver:加权随机掉落 + 难度缩放实现——待 Unity 内配置掉落表并验证
|
||||
☑ ProjectileConfigSO + Projectile(Linear/Arc/Homing/Parryable) + ProjectileManager 实现——待对象池预热后验证
|
||||
☑ DeathShade:IInteractable + Geo 回收事件实现——待 Unity 内验证交互流程
|
||||
□ Console 无 Error(Unity 编辑器内编译验证)
|
||||
```
|
||||
|
||||
**Phase 2 完成后进入 Phase 3。**
|
||||
### Week 5 已完成实现(2026-05-09)
|
||||
|
||||
| 文件 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `FormType.cs` | ✅ | Sky/Earth/Death 枚举 |
|
||||
| `FormSO.cs` | ✅ | 单形态数据 SO |
|
||||
| `FormConfigSO.cs` | ✅ | 三形态统一容器 |
|
||||
| `FormController.cs` | ✅ | 形态切换 + C# 事件 + SO 事件频道 |
|
||||
| `WeaponSO.cs` | ✅ | 完整扩展:6 方向动画片段 + DamageSource + VFX |
|
||||
| `WeaponManager.cs` | ✅ | FormController 联动 + 护符 Override 字典 |
|
||||
| `PlayerCombat.cs` | ✅ | HitBox 四向激活 + SetComboSegmentSource + Soul 增益 |
|
||||
| `PlayerStats.cs` | ✅ | AddSoul 别名 + 现有完整 API |
|
||||
| `PlayerMovement.cs` | ✅ | Dash / WallSlide / WallJump 方法 |
|
||||
| `PlayerMovementConfigSO.cs` | ✅ | 补充 DefaultGravityScale = 3f |
|
||||
| `PlayerWallDetector.cs` | ✅ | 独立组件,双射线每侧检测 |
|
||||
| `HitBox.cs` | ✅ | SetDamageSource 方法 |
|
||||
| `DashState.cs` | ✅ | 无敌帧 + 重力置零 + 冷却 |
|
||||
| `AerialDashState.cs` | ✅ | 空中冲刺计数 + 落地重置 |
|
||||
| `WallSlideState.cs` | ✅ | 下滑限速 + 蹬墙跳触发 |
|
||||
| `WallJumpState.cs` | ✅ | 蹬墙跳 + 输入锁定 |
|
||||
| `AirAttackState.cs` | ✅ | 空中攻击 + HitBoxAir |
|
||||
| `DownAttackState.cs` | ✅ | 下劈冲击 + 着地检测 |
|
||||
| `UpAttackState.cs` | ✅ | 上劈 + 结束分流 |
|
||||
| `HurtState.cs` | ✅ | 受击 + 击退 + 无敌帧 |
|
||||
| `DeadState.cs` | ✅ | 物理冻结 + HurtBox 关闭 |
|
||||
| `SpringState.cs` | ✅ | 灵泉治疗动画 |
|
||||
| `ParryState.cs` | ✅ | 弹反窗口开关 |
|
||||
| `PlayerController.cs` | ✅ | Phase 2 完整扩展(IPoiseSource + 11 状态 + TakeDamage 路由)|
|
||||
| `ShieldComponent.cs` | ✅ | Phase 2 完整实现(吸收 + 再生 + 破盾事件)|
|
||||
|
||||
### Week 8 已完成实现(2026-05-10)
|
||||
|
||||
| 文件 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `BoolEventChannelSO.cs` | ✅ | `BaseEventChannelSO<bool>` 频道,BossBase 依赖 |
|
||||
| `DifficultyScalerSO.cs` | ✅ | 难度缩放参数 SO,含 AI/玩家/敌人/经济多维度字段 |
|
||||
| `DifficultyManager.cs` | ✅ | 单例,`DefaultExecutionOrder(-900)`,SteelSoul 不可降级 |
|
||||
| `AudioEventSO.cs` | ✅ | 随机音效 SO,支持 Play / PlayOneShot |
|
||||
| `GlobalSFXPlayer.cs` | ✅ | 静态 SFX 入口,支持 2D 和世界坐标 3D 播放 |
|
||||
| `EnemyBase._playerTransform` | ✅ | 改为 `protected`,子类(RangedEnemy/FlyingEnemy)可访问 |
|
||||
| `BaseGames.Combat.asmdef` | ✅ | 新增 `BaseGames.Core` 引用,供 GlobalObjectPool 使用 |
|
||||
|
||||
### Week 9 已完成实现(2026-05-10)
|
||||
|
||||
| 文件 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `ProjectileConfigSO.cs` | ✅ | 抛射物配置 SO(速度/生命周期/弹反倍率/对象池键) |
|
||||
| `Projectile.cs` | ✅ | 抽象基类,Initialize + ReturnToPool,依赖 PooledObject |
|
||||
| `LinearProjectile.cs` | ✅ | 直线飞行,固定速度 |
|
||||
| `ArcProjectile.cs` | ✅ | 抛物线,LaunchAngleDeg + GravityScale |
|
||||
| `HomingProjectile.cs` | ✅ | 追踪弹,每帧向目标转向 |
|
||||
| `ParryableProjectile.cs` | ✅ | 可弹反,手动 OnTriggerEnter2D 检测 ParrySystem |
|
||||
| `ProjectileManager.cs` | ✅ | 单例,缓存 PlayerTransform,辅助 Homing 注入目标 |
|
||||
| `RangedEnemy.cs` | ✅ | 重写 SpawnProjectile,GlobalObjectPool.Spawn + Initialize |
|
||||
| `FlyingEnemy.cs` | ✅ | Rigidbody2D MoveTowards 追击 + OnTriggerStay2D 接触伤害 |
|
||||
| `BossBase.cs` | ✅ | EnterPhase(int) + IsHPBelow(ratio) + Die 广播战斗结束 |
|
||||
| `LootTableSO.cs` | ✅ | 战利品表 SO,LootEntry 含 BaseWeight + ScaleWithDifficulty |
|
||||
| `LootResolver.cs` | ✅ | 加权随机掉落 + DifficultyManager 缩放保底 Geo |
|
||||
| `DeathShade.cs` | ✅ | IInteractable,IntEventChannelSO 零耦合返还 Geo |
|
||||
|
||||
### P2-7 补充实现(2026-05-12)
|
||||
|
||||
| 文件 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `ILOSRequester.cs` | ✅ | 视线检测请求接口(`LOSOrigin`/`LOSTarget`/`LOSBlockingMask`/`ReceiveLOSResult`);命名空间 `BaseGames.Enemies.AI` |
|
||||
| `BatchLOSSystem.cs` | ✅ | 批量视线检测,`[DefaultExecutionOrder(-200)]`,round-robin Raycast2D(最多 8/帧),`Register`/`Unregister` |
|
||||
| `TelegraphSystem.cs` | ✅ | Boss 预警系统;`ShowTelegraph(vfxKey, duration, pos)` Coroutine;`GlobalObjectPool.Instance.Spawn`;`PooledObject.ReturnToPool()` |
|
||||
| `EnemyQuotaManager.cs` | ✅ | BT 配额管理;最多 12 棵 BT 启用;每 10 帧按玩家距离排序重排 |
|
||||
| `EnemyBase.cs` | ✅ | 扩展:实现 `ILOSRequester`;新增 `Nav`/`Movement`/`Stats`/`Animancer`/`AnimConfig`/`BehaviorTree`(`#if GRAPH_DESIGNER`)属性;`SetAggroTickRate`;`JumpTo` |
|
||||
| `EnemyStatsSO.cs` | ✅ | 追加 `EyeOffset`(`Vector2(0,0.8f)`)+ `LOSBlockingMask`(LayerMask)字段 |
|
||||
| `EnemyMovement.cs` | ✅ | 追加 `JumpToTarget(Vector2)` 抛物线跳跃方法 |
|
||||
| `EnemyAnimationConfigSO.cs` | ✅ | 追加 `GetClipByName(string)` 方法(switch 路由 Idle/Walk/Run/Attack/Hurt/Death) |
|
||||
| `BD_TeleportTo.cs` | ✅ | Action;单帧 `transform.position = Target.Value`,返回 Success |
|
||||
| `BD_SummonMinions.cs` | ✅ | Action;`GlobalObjectPool.Instance.Spawn(key, pos, Quaternion.identity)`;随机角度偏移 |
|
||||
| `BD_EnterPhase.cs` | ✅ | Action;`GetComponent<BossBase>()?.EnterPhase(PhaseIndex.Value)` |
|
||||
| `BD_IsPlayerVisible.cs` | ✅ | Conditional;调用 `_enemy.IsPlayerVisible()` |
|
||||
| `BD_CanAttack.cs` | ✅ | Conditional;调用 `_enemy.CanAttack()` |
|
||||
| `BD_IsHPBelow.cs` | ✅ | Conditional;SharedFloat 阈值(0–1);`CurrentHP/MaxHP <= threshold` |
|
||||
| `BD_IsGrounded.cs` | ✅ | Conditional;`_enemy.Movement?.IsGrounded` |
|
||||
| `BD_IsNearEdge.cs` | ✅ | Conditional;`_enemy.Nav?.IsNearEdge()` |
|
||||
| `BD_IsStateMatch.cs` | ✅ | Conditional;SharedInt TargetState;`(int)_enemy.CurrentState == TargetState.Value` |
|
||||
|
||||
### P2-8 补充实现(2026-05-13)
|
||||
|
||||
| 文件 | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| `ShieldComponent.cs` | ✅ | P2-2 VFX 钩子:新增 `_onShieldBrokenChannel`(VoidEventChannelSO)和 `_onShieldRestoredChannel`(VoidEventChannelSO);破碎时 Raise broken,破碎惩罚结束/FullRecharge 时 Raise restored |
|
||||
| `PostProcessManager.cs` | ✅ | P2-5 VFX:后处理 Volume 分区管理器;Coroutine 渐变 Boss/Death/Victory Volume 权重;订阅 BossFightStarted/Ended、PlayerDied/Respawned、BossDefeated 事件频道 |
|
||||
| `RegionLightController.cs` | ✅ | P2-5 VFX:区域灯光切换;订阅 `StringEventChannelSO _onRegionEntered`;Coroutine 渐变 Global Light 2D 颜色和强度 |
|
||||
| `RegionLightCatalogSO.cs` | ✅ | P2-5 VFX:与 RegionLightController 同文件;regionId → Color + Intensity 映射 |
|
||||
| `PaletteSwapSystem.cs` | ✅ | P2-5 VFX:形态调色板切换;`ApplyPalette(FormType)` 通过 MaterialPropertyBlock 设置 `_PaletteTex` |
|
||||
| `PaletteCatalogSO.cs` | ✅ | P2-5 VFX:与 PaletteSwapSystem 同文件;FormType → Texture2D(LUT 1D 256×1 px)映射 |
|
||||
| `BaseGames.VFX.asmdef` | ✅ | 新增 `BaseGames.Player` 引用(PaletteSwapSystem 需要 FormType) |
|
||||
| `CombatSFXController.cs` | ✅ | P2-8 SFX 钩子:所有字段由 `AudioClip` 升级为 `AudioEventSO`;播放改为 `GlobalSFXPlayer.Play(sfx, pos)`,支持随机音量/音调/多片段 |
|
||||
|
||||
Reference in New Issue
Block a user