SepComet 37b33c65f0 重构随机角色卡交互并清理 SelectRoleForm 视图层
按 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。
2026-06-14 17:08:53 +08:00
2026-02-16 19:03:09 +08:00
2026-03-16 22:24:07 +08:00

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(配置序列化)

运行方式

  1. Unity Hub 打开项目根目录
  2. 确认 Unity 版本为 2022.3.62f3c1
  3. 打开 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/视觉改动附上截图或录屏
S
Description
No description provided
Readme
109 MiB
Languages
C# 96.6%
ShaderLab 1.7%
GLSL 1.1%
HLSL 0.5%