按 5 层 UI 规范的 §3.5(View 只消费 Context、不内嵌业务/数据筛选) 对 SelectRoleForm 视图侧做一轮收敛,顺带把"随机角色卡"与"角色槽"在结构层面分离,让 prefab 不再依赖 GetComponentsInChildren 顺序来跳过随机卡上的 RoleItem 占位。 RoleItem: - UpdateShowRole() → OnHoverEnter()。原方法名与 Form/Controller 上曾经存在的 UpdateShowRole 同名,但语义完全不同(后者是切换属性卡显示,这里是上报 hover 事件),改名消除歧义,与 prefab 上 PointerEnter 绑定的实际语义对齐。 - 补 _context == null 早退,不再把 RoleId = -1 的"伪 hover"上报到下游、依赖 UseCase 端的哨兵兜底。 SelectRoleForm: - 新增 OnRandomConfirmClick(),给随机角色卡的 CommonButton 提供独立的 Click 入口,直接发 SelectRoleConfirmEventArgs,不再借 RoleItem.OnConfirmRoleClick 这条路径。 - RefreshUI 由 while + 双下标(itemIndex / roleIndex 同步推进、itemIndex 起步为 1 跳过随机卡上的 RoleItem 占位)收成单下标 for,起步下标恢复 0;槽位不足时 OnReset 放在 SetActive(false) 之前,语义顺序更自然。 - 清掉未使用的 using System。 |
||
|---|---|---|
| Assets | ||
| Packages | ||
| ProjectSettings | ||
| Tools | ||
| docs | ||
| skills | ||
| 数据表 | ||
| .gitattributes | ||
| .gitignore | ||
| .vsconfig | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| README.md | ||
README.md
VampireLike
这是一个学习项目
VampireLike 是一个基于 Unity 2022.3 LTS 的动作生存类项目,旨在实践以下技术要点:
- GameFramework 框架的组件化设计 — 理解如何通过
GameEntry.<Component>解耦各模块(事件 Entity/UI/Procedure/Resource 等) - UI 架构的分层设计 — 实践 Controller / UseCase / View 三层分离,理解"context"作为数据桥梁的作用
- 数据驱动设计 — 通过 DataTable(DRBullet、DREnemy、DRWeapon 等)实现配置与代码的分离
- 数据导向(Data-Oriented)模拟系统 —
SimulationWorld展示了如何将 ECS 思路应用于 Unity:SimData 结构体 → Job 并行处理 → 结果提交 → 表现层同步 - Entity-Component 模式 — 实体(Player/Enemy/Weapon)与数据(EntityData)分离,配合对象池实现高效Spawn/Despawn
- 技能系统设计 — StatModifier(加减/乘算)的组合、AttackComponent 的技能释放流程
- Target Selector 模式 — 武器通过
ITargetSelector接口支持多种目标选择策略(最近/最低血量/最高血量)
项目结构
Assets/
├── GameFramework/ # 通用框架(来自 GameFramework.cn)
│ └── Scripts/Runtime/ # Event/Entity/UI/Procedure/Resource 等组件
├── GameMain/ # 游戏业务代码
│ ├── Scripts/
│ │ ├── Base/ # GameEntry 入口
│ │ ├── Components/ # 游戏组件(Movement/Attack/Health/Stat...)
│ │ ├── CustomEvent/ # 自定义事件
│ │ ├── DataTable/ # DR* 数据行定义
│ │ ├── Definition/ # 枚举、结构体、常量
│ │ ├── Entity/ # 实体逻辑与数据
│ │ ├── Procedure/ # 流程状态机
│ │ ├── Simulation/ # 数据导向模拟层
│ │ ├── UI/ # UI(Controller/UseCase/View 分离)
│ │ └── CustomComponent/ # 自定义功能组件
│ ├── Scenes/ # Menu/Main/Game 场景
│ └── DataTables/ # 数据表资源
├── Launcher.unity # 启动场景
├── Plugins/ # 第三方插件(DOTween)
└── Tests/ # 单元测试
技术栈
- Unity 2022.3.62f3c1 LTS
- Input System(
com.unity.inputsystem) - Universal Render Pipeline(
com.unity.render-pipelines.universal) - TextMeshPro(
com.unity.textmeshpro) - DOTween(动画)
- Unity Test Framework(NUnit)
- Newtonsoft.Json(配置序列化)
运行方式
- Unity Hub 打开项目根目录
- 确认 Unity 版本为
2022.3.62f3c1 - 打开
Assets/Launcher.unity并 Play
CLI 方式:
Unity -projectPath .
代码规范
- C# 4 空格缩进,K&R 大括号风格
- 单文件单主类型,文件名与类型名一致
PascalCase公有成员,camelCase局部变量- Inspector 暴露用
[SerializeField] private - 保持
.meta文件与资源同步
测试
# EditMode 测试
Unity -batchmode -projectPath . -runTests -testPlatform editmode -quit -logFile Logs/editmode-tests.log
测试目录:Assets/Tests/、Assets/Tests/Simulation/EditMode/、Assets/Tests/Simulation/PlayMode/
协作
- 提交信息使用简短祈使句,建议包含模块上下文(如
UI: Fix shop item refresh logic) - PR 包含变更摘要、测试说明、关联任务/Issue
- UI/视觉改动附上截图或录屏