项目类型 :塔防 + ARPG 混合玩法(Unity 2019.1)
文档版本 :1.0
最后更新 :2026-08-23
相关文档 :REFACTOR_PLAN.md (重构执行记录)
游戏概述
核心玩法循环
项目结构
模块详解
模块关系与数据流
设计模式应用
配置与数据驱动
场景与资源策略
输入与 UI 系统
扩展点与技术债
FisDemo 是一款双玩法融合 的 3D 动作塔防游戏:
维度
塔防(TD)
ARPG
玩家角色
在地图上自由移动
近战/范围技能战斗
防御手段
在 GroundWork 地基上建造四种塔
主动攻击沿路径前进的敌人
资源
金币(建塔、经济循环)
魔法值 SP(技能消耗)
胜负
敌人到达终点 → 失败;全波次清空 → 胜利
击杀敌人获得金币与 MP 回复
准备阶段 :玩家在倒计时内规划防线、建造与升级防御塔。
战斗阶段 :敌人沿固定路径推进,玩家操控角色拦截,塔自动射击辅助。
双视角 :第三人称(环绕相机)与第一人称(Tab 切换),兼顾策略观察与沉浸战斗。
类别
选型
引擎
Unity 2019.1.10f1
脚本
C#(MonoBehaviour + ScriptableObject)
UI
UGUI(运行时代码构建 HUD + WorldCanvas 预制体建塔 UI)
资源加载
Resources + ResMap.txt 别名映射
配置
ScriptableObject + GameConfigRegistry 聚合
┌─────────────────────────────────────────────────────────────┐
│ 游戏启动 (Bootstrap.unity) │
│ GameEntry │
│ 程序化生成:地图 / 玩家 / UI / 管理器 │
└──────────────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 准备阶段 (prepareTime ≈ 30s) │
│ · UIControl 倒计时 │
│ · 玩家移动、F 键选地基、建造/升级塔 (CreatTower) │
│ · 消耗金币 (EconomyConfigSO.buildTowerCost) │
└──────────────────────────┬──────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────────┐
│ 波次刷怪 (GameManage.EnemyIncubator) │
│ · waveCount 波 × enemiesPerWave 只/波 │
│ · 从 CreatPoint 随机实例化敌人 Prefab │
│ · count 追踪场上敌人总数 │
└──────────────────────────┬──────────────────────────────────┘
▼
┌──────────────────┴──────────────────┐
▼ ▼
┌───────────────┐ ┌───────────────────┐
│ 敌人沿路径移动 │ │ 玩家 ARPG 战斗 │
│ EnemyAI │ │ 技能 + 塔火力 │
│ → 到达终点判负 │ │ → 击杀减 count │
└───────────────┘ └───────────────────┘
│ │
└──────────────────┬──────────────────┘
▼
count == 0 且全波刷完 → 胜利
敌人到达终点 → 失败
结果
触发条件
表现
失败
任意敌人到达路径终点
GameOverPanel 显示「你输了!」,停止所有 EnemyAI
胜利
GameManage.isFinish == true 且 count == 0
显示「你赢了!」
初始金币 (initialGold: 1000)
│
├─ 建造塔 → 消耗 buildTowerCost (300)
│
└─ 击杀敌人 → 获得 killReward (20) + 玩家 MP 回复 mpRecoverOnKill (3)
FisDemo/
├── Assets/
│ ├── _Game/ # 项目自有内容(代码、配置、运行时资源)
│ │ ├── Scripts/ # 全部 C# 逻辑(7 个子模块)
│ │ ├── Resources/ # 运行时加载资源
│ │ ├── Scenes/ # Bootstrap.unity / Main.unity
│ │ ├── Art/ # 自有美术
│ │ └── Editor/ # 编辑器工具
│ └── _ThirdParty/ # 第三方美术资产(无游戏逻辑)
│ ├── MOBA_TowerDefense/
│ ├── Zombies/
│ ├── Adventurer/
│ └── FX/
├── docs/ # 设计/重构文档
├── tools/ # 离线分析脚本(prefab GUID 审计等)
└── Packages/manifest.json
Assets/_Game/Scripts/
├── Core/ 启动、关卡组装、波次管理、HUD 工厂、音频
├── Character/ 输入、移动、动画、状态、技能触发链
├── Combat/ 技能数据、部署器、攻击选择器、伤害/消耗影响器
├── TowerDefense/ 敌人 AI、塔 AI、建塔、子弹
├── Data/ ScriptableObject 配置与工厂
├── Camera/ 第三/第一人称相机
└── Infrastructure/ 单例、对象池、资源映射、工具类
命名空间
模块
示例类
ARPGDemo.Character
角色
CharacterSkillSystem, MonsterStatus
ARPGDemo.Skill
战斗
SkillData, CharacterSkillManger
FisDemo.Data
配置
GameConfigRegistry, SkillConfigSO
FisDemo.TowerDefense
塔防枚举
TowerKind, EnemyType
(全局)
核心/塔防逻辑
GameEntry, GameManage, EnemyAI
历史原因导致命名空间混用,新代码建议统一为 FisDemo.*。
职责 :游戏入口、运行时依赖注入、波次调度、HUD 构建。
类
文件
职责
GameEntry
Core/GameEntry.cs
组合根(Composition Root) :Awake 时组装整关
LevelContext
Core/LevelContext.cs
服务定位器 :集中持有地图/玩家/相机/UI/管理器引用
GameManage
Core/GameManage.cs
波次刷怪协程、胜负判定、count 敌人计数
GameUIFactory
Core/GameUIFactory.cs
纯代码构建 Screen Space HUD
UIControl
Core/UIControl.cs
金币/MP 显示、准备阶段倒计时
GameBootstrap
Core/GameBootstrap.cs
旧场景兜底(清理 VR 残留、补全 Pool)
AudioManage
Core/AudioManage.cs
塔开火音效
GameEntry 组装顺序 :
EnsureEventSystem → EnsureLevelContext → EnsureObjectPool
→ SpawnMap(EVE) → CreateSpawnPoint → SpawnPlayer
→ SetupCameras → SpawnUI → SpawnManagers
→ MarkReady → SpawnWorldCanvas → WireUIControl → WireGameManage
职责 :输入采集、角色移动、动画驱动、技能触发入口、HP/SP 状态。
类
文件
职责
CharacterInputController
Character/CharacterInputController.cs
WASD/鼠标/技能键/建塔键输入路由
CharacterMotor
Character/CharacterMotor.cs
CharacterController.SimpleMove 驱动位移
CharacterAnimation
Character/CharacterAnimation.cs
Animator Bool 参数切换
AnimationEventBehaviour
Character/AnimationEventBehaviour.cs
动画帧事件 → attackHandler 委托
CharacterSkillSystem
Character/CharacterSkillSystem.cs
选目标 → 播动画 → 触发技能部署
CharacterStatus
Character/CharacterStatus.cs
HP/SP/防御抽象基类
PlayerStatus
Character/PlayerStatus.cs
玩家状态,读取 PlayerConfigSO
MonsterStatus
Character/MonsterStatus.cs
怪物状态,供 EnemyAI 使用
职责 :技能配置实例化、目标选择、伤害施加、对象池回收。
类
文件
职责
CharacterSkillManger
Combat/CharacterSkillManger.cs
技能列表、冷却、从池创建 Prefab 并部署
SkillData
Combat/SkillData.cs
运行时技能数据(Serializable,非 SO)
SkillDeployer
Combat/SkillDeployer.cs
抽象部署器:装配选择器 + 影响器链
MeleeSkillDeployer
Combat/MeleeSkillDeployer.cs
唯一具体部署器实现
DeployConfigFactory
Combat/DeployConfigFactory.cs
按 DamageMode 创建攻击选择器
CircleAttackSelector
Combat/AttackSelector/
OverlapSphere 圆形选敌
SectorAttackSelector
Combat/AttackSelector/
Tag + 距离 + 角度扇形选敌
DamageTargetImpact
Combat/TargetImpact/
对目标持续/单次伤害
CostSpImpact
Combat/SelfImpact/
消耗施法者 SP
技能执行管线 :
输入 → PrepareSkill(检查冷却/SP)
→ SelectTarget(按 tag + 距离 + Hp)
→ PlayAnimation
→ [动画事件 OnAttack]
→ DeploySkill
→ GameObjectPool.CreateObject(skillPrefab)
→ SkillDeployer.DepolySkill()
① ResetTarget() — IAttackSelector
② SelfImpact — CostSpImpact
③ TargetImpact — DamageTargetImpact → EnemyAI.Damage()
④ CollectSkill() — 回收到对象池
职责 :敌人路径 AI、防御塔攻击、建塔交互、子弹追踪。
类
文件
职责
EnemyAI
TowerDefense/EnemyAI.cs
沿 waypoints 移动、受伤/死亡、奖励发放
TowerAI
TowerDefense/TowerAI.cs
触发器检测敌人、发射子弹或激光
CreatTower
TowerDefense/CreatTower.cs
射线选地基、WorldCanvas 建塔/升级 UI
BulletMove
TowerDefense/BulletMove.cs
追踪子弹,命中调用 EnemyAI.Damage
TowerKind
TowerDefense/TowerType.cs
Cannon/Mortar/Gatling/Laser 枚举与映射
EnemyType
TowerDefense/EnemyType.cs
五种僵尸类型与行走动画选择
塔类型 :
TowerKind
攻击模式
预制体前缀
Cannon
Projectile(子弹)
Tow_BaseCannon
Mortar
Projectile
Tow_BaseMortar
Gatling
Projectile
Tow_BaseGatling
Laser
Laser(LineRenderer)
Tow_BaseLaser
每类塔支持 2 级升级 (upgradeIndex 0→1→2),预制体命名 Tow_UpgradeOne* / Tow_UpgradTwo*。
职责 :将数值、波次、技能等游戏参数外置为 ScriptableObject,支持编辑器调参与运行时回退。
类
文件
职责
GameConfigRegistry
Data/GameConfigRegistry.cs
配置中枢,聚合全部 SO
PlayerConfigSO
Data/PlayerConfigSO.cs
玩家属性 + 技能列表引用
SkillConfigSO
Data/SkillConfigSO.cs
单技能静态配置
EnemyWaveConfigSO
Data/EnemyWaveConfigSO.cs
波次参数 + 敌人 Prefab 数组
EconomyConfigSO
Data/EconomyConfigSO.cs
金币经济参数
TowerConfigSO
Data/TowerConfigSO.cs
塔攻击间隔/范围/伤害/弹速
EnemyConfigSO
Data/EnemyConfigSO.cs
敌人 HP/移速/动画/特效
SkillDataFactory
Data/SkillDataFactory.cs
SkillConfigSO → 运行时 SkillData
类
文件
职责
PlayerCameraController
Camera/PlayerCameraController.cs
Tab 切换第三人称环绕 / 第一人称;提供相对相机的移动方向向量
4.7 Infrastructure — 基础设施
类
文件
职责
MonoSingleton<T>
Infrastructure/MonoSingleton.cs
泛型 MonoBehaviour 单例基类
GameObjectPool
Infrastructure/GameObjectPool.cs
按 key 复用 GameObject(技能/特效)
ResourceManager
Infrastructure/ResourceManager.cs
ResMap.txt 别名 → Resources.Load
ArrayHelper
Infrastructure/ArrayHelper.cs
数组 FindAll / Min 等 LINQ 风格扩展
GUIShowDamage
Infrastructure/GUIShowDamage.cs
世界空间伤害飘字(OnGUI 渲染)
GenerateResConfig
Infrastructure/GenerateResConfig.cs
编辑器:扫描 Prefab 生成 ResMap
graph TB
subgraph Bootstrap["启动层 Core"]
GE[GameEntry]
LC[LevelContext]
GM[GameManage]
GUF[GameUIFactory]
UIC[UIControl]
end
subgraph Player["玩家层 Character + Camera"]
CIC[CharacterInputController]
CM[CharacterMotor]
CA[CharacterAnimation]
CSS[CharacterSkillSystem]
PCC[PlayerCameraController]
PS[PlayerStatus]
end
subgraph Combat["战斗层 Combat"]
CSM[CharacterSkillManger]
SD[SkillDeployer]
POOL[GameObjectPool]
end
subgraph TD["塔防层 TowerDefense"]
EAI[EnemyAI]
TAI[TowerAI]
CT[CreatTower]
BM[BulletMove]
end
subgraph Data["数据层 Data"]
GCR[GameConfigRegistry]
SO[ScriptableObjects]
end
GE --> LC
GE --> GM
GE --> GUF
GUF --> UIC
CIC --> CM
CIC --> CSS
CIC --> CT
CIC --> PCC
CM --> CA
CSS --> CSM
CSS --> CA
CSM --> SD
CSM --> POOL
SD --> EAI
GM --> EAI
GM --> LC
TAI --> BM
BM --> EAI
CT --> UIC
CT --> TAI
GCR --> SO
CSM --> GCR
GM --> GCR
EAI --> GCR
TAI --> GCR
UIC --> GCR
PS --> GCR
LC -.->|引用| GM
LC -.->|引用| UIC
LC -.->|引用| EAI
Loading
LevelContext 是各子系统解耦的关键:由 GameEntry 在关卡构建完成后一次性注册所有引用,其他模块优先读取 LevelContext.Instance,仅在 Context 不可用时回退到 GameObject.Find。
GameEntry.BuildLevel()
│
├─ RegisterMap() → EnemyAI 读取 Waypoints
├─ RegisterSpawnPoint() → GameManage 读取出生点
├─ RegisterPlayer() → UIControl / Camera 读取玩家
├─ RegisterCameras() → PlayerCameraController
├─ RegisterUI() → UIControl / EnemyAI 读取金币 UI
└─ RegisterManagers() → CreatTower / EnemyAI 读取 GameManage
编辑器:
FisDemo/Generate Default Configs
→ 创建 .asset 文件
→ GameConfigRegistry 引用各子 SO
运行时:
GameConfigRegistry.Instance
→ Resources.Load("Configs/GameConfigRegistry")
→ 失败时 CreateRuntimeDefaults() 内存实例化
消费方:
CharacterSkillManger.Start() ← player.skills → SkillDataFactory
GameManage.Start() ← enemyWave
UIControl.Start() ← economy
EnemyAI.Start() ← enemy + economy
TowerAI.Start() ← tower
PlayerStatus / CharacterInput ← player
玩家输入
→ CharacterSkillSystem.AttackUseSkill
→ AnimationEventBehaviour.OnAttack (事件)
→ CharacterSkillManger.DeploySkill
→ MeleeSkillDeployer.DepolySkill
→ DamageTargetImpact.TargetImpact
→ EnemyAI.Damage(damageVal)
→ MonsterStatus.OnDamage (扣血)
→ GUIShowDamage (飘字)
→ OnDeath → count--, 加金币, 恢复 MP
塔攻击
→ TowerAI (触发器检测 Enemy tag)
→ BulletMove / LineRenderer 激光
→ EnemyAI.Damage
设计模式
应用位置
作用
Singleton(单例)
LevelContext, GameConfigRegistry, GameObjectPool
全局唯一访问点
Service Locator(服务定位器)
LevelContext
集中注册/获取运行时服务引用
Composition Root(组合根)
GameEntry.BuildLevel()
在唯一入口组装全部依赖
Factory Method(工厂方法)
DeployConfigFactory, SkillDataFactory, GameUIFactory
按配置创建选择器/技能数据/UI
Object Pool(对象池)
GameObjectPool
技能 Prefab 复用,减少 GC
Strategy(策略)
IAttackSelector, ISelfImpact, ITargetImpact
可替换的攻击选择与影响逻辑
Template Method(模板方法)
SkillDeployer 抽象类 + MeleeSkillDeployer
固定部署流程,子类实现细节
Observer / Event(观察者)
AnimationEventBehaviour.attackHandler
动画帧解耦触发技能部署
ScriptableObject Config(数据驱动)
全部 *ConfigSO
数值外置,编辑器可视化调参
State(状态,隐式)
CharacterAnimation Animator Bool
通过 Bool 参数驱动动画状态机
6.2.1 Composition Root — GameEntry
GameEntry 是整个运行时唯一的依赖组装点 。它不承载业务逻辑,只负责:
确保基础设施存在(EventSystem、LevelContext、ObjectPool)
按正确顺序实例化并连线各子系统
将引用注入 LevelContext
这使 Bootstrap.unity 可以极度精简(仅 Light + GameEntry),避免旧 Main.unity 中大量 Missing Script 问题。
6.2.2 Strategy + Factory — 技能系统
SkillDeployer (Context)
│
├── IAttackSelector (Strategy)
│ ├── CircleAttackSelector — OverlapSphere
│ └── SectorAttackSelector — Tag + 角度
│
├── ISelfImpact[] (Strategy)
│ └── CostSpImpact — 扣 SP
│
└── ITargetImpact[] (Strategy)
└── DamageTargetImpact — 扣 HP
DeployConfigFactory (Factory) — 根据 SkillData.damageMode 装配上述策略
当前仅 MeleeSkillDeployer 一个具体实现,但架构支持扩展新的 SkillDeployer 子类(如远程投射、Buff 类)。
6.2.3 Observer — 动画事件驱动技能
CharacterSkillSystem AnimationEventBehaviour
│ │
│ 订阅 attackHandler │ 动画帧调用 OnAttack()
├────────────────────────────────────┤
│ │
▼ ▼
DeploySkill() ◄─────────────── attackHandler.Invoke()
将输入时机 (按键)与生效时机 (动画命中帧)解耦,是 ARPG 技能的常见做法。
CreateObject(key, prefab) → 实例化或从池取出
→ DepolySkill() 执行
→ CollectObject(go, delay) → 延迟后 SetActive(false) 放回池
7.1 ScriptableObject 资产清单
资产文件
SO 类型
路径
GameConfigRegistry.asset
聚合根
Resources/Configs/
PlayerConfig.asset
玩家
同上
EnemyWaveConfig.asset
波次
同上
EconomyConfig.asset
经济
同上
TowerConfig.asset
塔
同上
EnemyConfig.asset
敌人
同上
SkillConfig_Melee.asset
近战技能
Resources/Configs/Skills/
SkillConfig_CircleAttack.asset
圆形群攻
同上
经济 (EconomyConfigSO)
字段
默认值
initialGold
1000
killReward
20
mpRecoverOnKill
3
buildTowerCost
300
波次 (EnemyWaveConfigSO)
字段
默认值
prepareTime
30s
waveCount
5
enemiesPerWave
5
spawnInterval
0.5s
waveInterval
3s
技能
ID
名称
类型
关键参数
1
MeleeAttack
单体近战
damage=50, distance=3, anim=attack2, 无冷却
2
CircleAttack
群体圆形
cool=5s, costSP=30, duration=3s, interval=0.5s, anim=attack1
菜单
功能
FisDemo → Create Bootstrap Scene
创建/更新 Bootstrap 场景与 Build Settings
FisDemo → Generate Default Configs
生成全部 SO 配置资产
Tools → Resources → Generate Config File
扫描 Prefab 生成 ResMap.txt
场景
状态
策略
Bootstrap.unity
启用
唯一启动场景:Directional Light + GameEntry
Main.unity
禁用
旧场景保留参考,含手动摆放与 Missing Script
设计决策 :采用程序化关卡生成 而非场景内预摆放,解决脚本迁移后 GUID 断裂导致的 Missing Script 问题。
用途
Resources 路径
运行时挂载
地图
Prefabs/EVE
纯模型,child[1] 下 Transform 为路径点
玩家
Prefabs/Player
GameEntry 动态添加全部组件
建塔 UI
Prefabs/WorldCanvas
含 FirstSelect / NextSelect
敌人
Prefabs/Enemys/Zombie_1~5
EnemyAI + MonsterStatus + Animator
塔
Prefabs/Towers/Tow_*
运行时 AddComponent TowerAI
子弹
Prefabs/Bullet
运行时 AddComponent BulletMove
技能
Skill/BaseMeleeAttackSkill, CircleAttackSkill
MeleeSkillDeployer
死亡特效
Prefabs/Die
纯粒子
伤害飘字
Prefabs/Damage2
GUIShowDamage
8.3 _Game vs _ThirdParty 边界
目录
包含
不包含
_Game
脚本、SO 配置、运行时 Prefab、自有美术
第三方模型源码
_ThirdParty
MOBA 地图/塔模型、僵尸、冒险者角色、FX
任何项目 C# 脚本
输入
功能
处理类
WASD
移动
CharacterInputController → CharacterMotor
鼠标移动
视角
PlayerCameraController
Tab
第三人称 ↔ 第一人称
PlayerCameraController
Left Shift
加速 (×1.5)
CharacterInputController
左键 / JoystickButton5
技能 1(近战)
CharacterSkillSystem.AttackUseSkill(1)
右键 / RT 轴
技能 2(圆形群攻)
CharacterSkillSystem.AttackUseSkill(2)
F / JoystickButton4
选择地基建塔
CreatTower.SelectBase()
方向键 / 手柄
WorldCanvas 内选塔/建造/升级
CreatTower
┌─────────────────────────────────────────┐
│ Screen Space Overlay (GameUIFactory) │
│ · 金币 / MP 文本 │
│ · 准备阶段倒计时 │
│ · 结算面板 (胜/负) │
├─────────────────────────────────────────┤
│ World Space (WorldCanvas Prefab) │
│ · FirstSelect — 选择塔类型 │
│ · NextSelect — 建造 / 升级 / 出售 │
├─────────────────────────────────────────┤
│ 伤害飘字 (GUIShowDamage / Damage2) │
│ · 世界坐标 → 屏幕坐标 OnGUI 渲染 │
└─────────────────────────────────────────┘
F 键 + 射线命中 GroundWork 标签
→ 显示 WorldCanvas(俯视 50°)
→ FirstSelect: 选择 Cannon / Mortar / Gatling / Laser
→ NextSelect:
↑ 建造(扣 300 金币)→ InstantiateTower → AddComponent<TowerAI>
← 升级(最多 2 级,替换预制体)
→ 出售(当前仅 Log,未实现)
→ F 键 / Esc 关闭 UI
扩展方向
建议接入点
新技能类型
新增 SkillDeployer 子类 + SkillConfigSO + DeployConfigFactory 扩展
新塔类型
TowerKind 枚举 + 预制体 + TowerType 扩展方法
新敌人种类
EnemyType 枚举 + Prefab + enemyWave.enemyPrefabs
新 UI 面板
GameUIFactory 扩展或独立 Factory
存档系统
在 EconomyConfigSO / PlayerConfigSO 之上加 Persistence 层
矩形攻击范围
实现 RectangleAttackSelector : IAttackSelector
问题
影响
建议
CharacterAnimation 用 clip 名当 Bool 参数
动画黏连/错乱
重写状态机,区分 locomotion/attack 参数
GUIShowDamage 使用 OnGUI + Find
性能差、飘字效果粗糙
改用 UGUI 对象池飘字服务
GameObject.Find 回退路径
脆弱,依赖对象命名
全面迁移到 LevelContext
SellTower 未实现
无法出售塔
补充销毁 + 返还金币逻辑
DamageMode.Rectangle 无选择器
配置无效
实现或从枚举移除
命名空间不统一
可读性差
逐步统一为 FisDemo.*
CharacterSkillManger 拼写
历史遗留
重命名为 Manager(需更新引用)
旧 NGUI UI Prefab
Missing Script
Bootstrap 流程已不使用,可归档删除
仅 MeleeSkillDeployer
所有技能共用同一部署逻辑
按需拆分远程/Buff 部署器
当前架构 目标架构
───────── ─────────
GameObject.Find 回退 → 全面 LevelContext 注入
OnGUI 飘字 → DamagePopupService 对象池
硬编码默认值 → 全部走 SO 资产(去掉回退或仅 Editor 用)
单 MeleeSkillDeployer → 按技能类型注册 Deployer 工厂
Main.unity 保留 → 完全移除或改为编辑器预览专用
classDiagram
class CharacterInputController {
+Update()
}
class CharacterSkillSystem {
+AttackUseSkill(skillId)
+DeploySkill()
-SelectTarget()
}
class CharacterSkillManger {
+PrepareSkill(id) SkillData
+DeploySkill(skill)
-CoolTimeDown()
}
class AnimationEventBehaviour {
+event attackHandler
+OnAttack()
+OnCancelAnim(name)
}
class SkillDeployer {
<<abstract>>
+skillData
+ResetTarget()
+DepolySkill()*
+CollectSkill()
}
class MeleeSkillDeployer {
+DepolySkill()
}
class IAttackSelector {
<<interface>>
+SelectTarget() GameObject[]
}
class ITargetImpact {
<<interface>>
+TargetImpact()
}
class ISelfImpact {
<<interface>>
+SelfImpact()
}
CharacterInputController --> CharacterSkillSystem
CharacterSkillSystem --> CharacterSkillManger
CharacterSkillSystem --> AnimationEventBehaviour : subscribes
CharacterSkillManger --> SkillDeployer
SkillDeployer <|-- MeleeSkillDeployer
SkillDeployer --> IAttackSelector
SkillDeployer --> ITargetImpact
SkillDeployer --> ISelfImpact
Loading
模块
路径
全部脚本
Assets/_Game/Scripts/
配置资产
Assets/_Game/Resources/Configs/
运行时 Prefab
Assets/_Game/Resources/Prefabs/
技能 Prefab
Assets/_Game/Resources/Skill/
启动场景
Assets/_Game/Scenes/Bootstrap.unity
第三方资产
Assets/_ThirdParty/
Prefab 审计工具
tools/analyze_prefab_scripts.py
GUID 修复工具
tools/batch_fix_guids.py
本文档基于当前代码库实际状态编写,随项目演进需同步更新。