Skip to content
aorbxcasPublic

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FisDemo 游戏设计文档

项目类型:塔防 + ARPG 混合玩法(Unity 2019.1)
文档版本:1.0
最后更新:2026-08-23
相关文档:REFACTOR_PLAN.md(重构执行记录)


目录

  1. 游戏概述
  2. 核心玩法循环
  3. 项目结构
  4. 模块详解
  5. 模块关系与数据流
  6. 设计模式应用
  7. 配置与数据驱动
  8. 场景与资源策略
  9. 输入与 UI 系统
  10. 扩展点与技术债

1. 游戏概述

1.1 设计定位

FisDemo 是一款双玩法融合的 3D 动作塔防游戏:

维度 塔防(TD) ARPG
玩家角色 在地图上自由移动 近战/范围技能战斗
防御手段 在 GroundWork 地基上建造四种塔 主动攻击沿路径前进的敌人
资源 金币(建塔、经济循环) 魔法值 SP(技能消耗)
胜负 敌人到达终点 → 失败;全波次清空 → 胜利 击杀敌人获得金币与 MP 回复

1.2 设计目标

  • 准备阶段:玩家在倒计时内规划防线、建造与升级防御塔。
  • 战斗阶段:敌人沿固定路径推进,玩家操控角色拦截,塔自动射击辅助。
  • 双视角:第三人称(环绕相机)与第一人称(Tab 切换),兼顾策略观察与沉浸战斗。

1.3 技术栈

类别 选型
引擎 Unity 2019.1.10f1
脚本 C#(MonoBehaviour + ScriptableObject)
UI UGUI(运行时代码构建 HUD + WorldCanvas 预制体建塔 UI)
资源加载 Resources + ResMap.txt 别名映射
配置 ScriptableObject + GameConfigRegistry 聚合

2. 核心玩法循环

┌─────────────────────────────────────────────────────────────┐
│                    游戏启动 (Bootstrap.unity)                │
│                         GameEntry                            │
│              程序化生成:地图 / 玩家 / UI / 管理器            │
└──────────────────────────┬──────────────────────────────────┘
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  准备阶段 (prepareTime ≈ 30s)                                │
│  · UIControl 倒计时                                          │
│  · 玩家移动、F 键选地基、建造/升级塔 (CreatTower)             │
│  · 消耗金币 (EconomyConfigSO.buildTowerCost)                 │
└──────────────────────────┬──────────────────────────────────┘
                           ▼
┌─────────────────────────────────────────────────────────────┐
│  波次刷怪 (GameManage.EnemyIncubator)                        │
│  · waveCount 波 × enemiesPerWave 只/波                       │
│  · 从 CreatPoint 随机实例化敌人 Prefab                        │
│  · count 追踪场上敌人总数                                     │
└──────────────────────────┬──────────────────────────────────┘
                           ▼
        ┌──────────────────┴──────────────────┐
        ▼                                      ▼
┌───────────────┐                    ┌───────────────────┐
│  敌人沿路径移动 │                    │  玩家 ARPG 战斗    │
│  EnemyAI       │                    │  技能 + 塔火力     │
│  → 到达终点判负 │                    │  → 击杀减 count    │
└───────────────┘                    └───────────────────┘
        │                                      │
        └──────────────────┬──────────────────┘
                           ▼
              count == 0 且全波刷完 → 胜利
              敌人到达终点           → 失败

2.1 胜负条件

结果 触发条件 表现
失败 任意敌人到达路径终点 GameOverPanel 显示「你输了!」,停止所有 EnemyAI
胜利 GameManage.isFinish == true 且 count == 0 显示「你赢了!」

2.2 经济循环

初始金币 (initialGold: 1000)
    │
    ├─ 建造塔 → 消耗 buildTowerCost (300)
    │
    └─ 击杀敌人 → 获得 killReward (20) + 玩家 MP 回复 mpRecoverOnKill (3)

3. 项目结构

3.1 顶层目录

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

3.2 脚本模块划分

Assets/_Game/Scripts/
├── Core/           启动、关卡组装、波次管理、HUD 工厂、音频
├── Character/      输入、移动、动画、状态、技能触发链
├── Combat/         技能数据、部署器、攻击选择器、伤害/消耗影响器
├── TowerDefense/   敌人 AI、塔 AI、建塔、子弹
├── Data/           ScriptableObject 配置与工厂
├── Camera/         第三/第一人称相机
└── Infrastructure/ 单例、对象池、资源映射、工具类

3.3 命名空间约定

命名空间 模块 示例类
ARPGDemo.Character 角色 CharacterSkillSystem, MonsterStatus
ARPGDemo.Skill 战斗 SkillData, CharacterSkillManger
FisDemo.Data 配置 GameConfigRegistry, SkillConfigSO
FisDemo.TowerDefense 塔防枚举 TowerKind, EnemyType
(全局) 核心/塔防逻辑 GameEntry, GameManage, EnemyAI

历史原因导致命名空间混用,新代码建议统一为 FisDemo.*。


4. 模块详解

4.1 Core — 启动与关卡组装

职责:游戏入口、运行时依赖注入、波次调度、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

4.2 Character — 玩家控制与状态

职责:输入采集、角色移动、动画驱动、技能触发入口、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 使用

4.3 Combat — 技能战斗系统

职责:技能配置实例化、目标选择、伤害施加、对象池回收。

类 文件 职责
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()     — 回收到对象池

4.4 TowerDefense — 塔防玩法

职责:敌人路径 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*。

4.5 Data — 配置数据层

职责:将数值、波次、技能等游戏参数外置为 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

4.6 Camera — 视角系统

类 文件 职责
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

5. 模块关系与数据流

5.1 模块依赖总览

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

5.2 LevelContext 作为运行时枢纽

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

5.3 配置数据流

编辑器:
  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

5.4 战斗伤害数据流

玩家输入
  → 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

6. 设计模式应用

6.1 模式总表

设计模式 应用位置 作用
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 关键模式详解

6.2.1 Composition Root — GameEntry

GameEntry 是整个运行时唯一的依赖组装点。它不承载业务逻辑,只负责:

  1. 确保基础设施存在(EventSystem、LevelContext、ObjectPool)
  2. 按正确顺序实例化并连线各子系统
  3. 将引用注入 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 技能的常见做法。

6.2.4 Object Pool — 技能回收

CreateObject(key, prefab) → 实例化或从池取出
    → DepolySkill() 执行
    → CollectObject(go, delay) → 延迟后 SetActive(false) 放回池

7. 配置与数据驱动

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 圆形群攻 同上

7.2 默认数值速查

经济 (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

7.3 编辑器工具链

菜单 功能
FisDemo → Create Bootstrap Scene 创建/更新 Bootstrap 场景与 Build Settings
FisDemo → Generate Default Configs 生成全部 SO 配置资产
Tools → Resources → Generate Config File 扫描 Prefab 生成 ResMap.txt

8. 场景与资源策略

8.1 场景策略

场景 状态 策略
Bootstrap.unity 启用 唯一启动场景:Directional Light + GameEntry
Main.unity 禁用 旧场景保留参考,含手动摆放与 Missing Script

设计决策:采用程序化关卡生成而非场景内预摆放,解决脚本迁移后 GUID 断裂导致的 Missing Script 问题。

8.2 关键 Prefab 路径

用途 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# 脚本

9. 输入与 UI 系统

9.1 输入映射

输入 功能 处理类
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

9.2 UI 分层

┌─────────────────────────────────────────┐
│  Screen Space Overlay (GameUIFactory)    │
│  · 金币 / MP 文本                        │
│  · 准备阶段倒计时                         │
│  · 结算面板 (胜/负)                       │
├─────────────────────────────────────────┤
│  World Space (WorldCanvas Prefab)        │
│  · FirstSelect — 选择塔类型               │
│  · NextSelect  — 建造 / 升级 / 出售      │
├─────────────────────────────────────────┤
│  伤害飘字 (GUIShowDamage / Damage2)     │
│  · 世界坐标 → 屏幕坐标 OnGUI 渲染         │
└─────────────────────────────────────────┘

9.3 建塔交互流程

F 键 + 射线命中 GroundWork 标签
    → 显示 WorldCanvas(俯视 50°)
    → FirstSelect: 选择 Cannon / Mortar / Gatling / Laser
    → NextSelect:
        ↑  建造(扣 300 金币)→ InstantiateTower → AddComponent<TowerAI>
        ←  升级(最多 2 级,替换预制体)
        →  出售(当前仅 Log,未实现)
    → F 键 / Esc 关闭 UI

10. 扩展点与技术债

10.1 推荐扩展点

扩展方向 建议接入点
新技能类型 新增 SkillDeployer 子类 + SkillConfigSO + DeployConfigFactory 扩展
新塔类型 TowerKind 枚举 + 预制体 + TowerType 扩展方法
新敌人种类 EnemyType 枚举 + Prefab + enemyWave.enemyPrefabs
新 UI 面板 GameUIFactory 扩展或独立 Factory
存档系统 在 EconomyConfigSO / PlayerConfigSO 之上加 Persistence 层
矩形攻击范围 实现 RectangleAttackSelector : IAttackSelector

10.2 已知技术债

问题 影响 建议
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 部署器

10.3 架构演进建议

当前架构                          目标架构
─────────                        ─────────
GameObject.Find 回退        →    全面 LevelContext 注入
OnGUI 飘字                  →    DamagePopupService 对象池
硬编码默认值                →    全部走 SO 资产(去掉回退或仅 Editor 用)
单 MeleeSkillDeployer       →    按技能类型注册 Deployer 工厂
Main.unity 保留             →    完全移除或改为编辑器预览专用

附录 A:类图(核心战斗链路)

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

附录 B:文件索引

模块 路径
全部脚本 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

本文档基于当前代码库实际状态编写,随项目演进需同步更新。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages