跳到主要内容

项目结构

Guide

GCS 将运行时与编辑器代码、可玩的 Demo、参考配方和项目自有数据分开放置,明确每个目录的职责后,包更新、内容创作与正式项目资产便可以互不干扰

场景完成初始化后,Project 窗口中会同时出现 GCS 包与项目自有内容,安装在 Assets/TinyGiants/ 下的包目录提供引擎、工具与随包 Demo,创建自定义数据库时按需生成的项目目录则保存真正属于当前游戏的卡牌、单位、状态、卡组与遭遇战,两类内容可以互相引用,但承担的职责不同,正式创作之前先分清这条边界,后续更新包体或整理项目资产时才不会混在一起

先分清包内容与项目内容

GCS 的默认目录边界如下

📦 Assets/
├── 🏢 TinyGiants/
│ ├── 📁 GameCardSystem/ # GCS 包根目录
│ │ ├── 🛡️ Runtime/ # 运行时引擎、数据模型与公开 API
│ │ ├── 🛠️ Editor/ # Workbench、FlowGraph、Monitor 与 Inspectors
│ │ ├── 🎮 Demo/ # 可运行、可拆解的完整参考项目
│ │ │ ├── 🎨 Content/ # Demo 美术、Prefab、音频与表现资产
│ │ │ ├── 🗄️ Databases/ # 六个预设数据库
│ │ │ ├── 🧩 DocumentationRecipes/ # 在线配方文档使用的行为图资产
│ │ │ ├── ⚔️ Scenes/ # 四个职业的 12 个战斗场景
│ │ │ ├── 💻 Scripts/ # Demo 棋盘、UI、表现与音频脚本
│ │ │ └── 🛠️ Editor/ # 仅服务于 Demo 的编辑器工具
│ │ ├── 🔌 Integrations/GES/ # 可选的 GameEventSystem 集成
│ │ ├── 📘 Docs/ # 包内离线文档入口
│ │ ├── 📋 Samples~/CustomNodes/ # 自定义节点示例与模板
│ │ ├── 📝 Changelog.md # 当前版本的功能记录
│ │ ├── 📖 Readme.txt # 包入口、菜单与支持链接
│ │ └── ⚖️ LICENSE.txt # 授权条款
│ └── 🔧 Shared/ # TinyGiants 共用的运行时与编辑器基础设施
└── 💾 TinyGiantsData/GameCardSystem/ # 项目自有 GCS 数据的默认根目录
├── 🃏 CardDatabases/
├── 🗂️ DeckDatabases/
├── ✨ StatusDatabases/
├── 🗺️ EncounterDatabases/
├── 🦸 PlayerUnits/
└── 👹 EnemyUnits/

Assets/TinyGiants/GameCardSystem/ 随包安装,Assets/TinyGiantsData/GameCardSystem/ 则由项目自己持有,后者会在创建对应类型的自定义数据库时逐级生成

GCS 包目录提供什么

目录内容什么时候进入
Runtime/ScriptableObject 数据模型、战斗状态机、FlowGraph 执行器、状态系统、事件与 GCSApi查阅运行时类型或接入公开 API
Editor/Game Card System 面板、六模式 Workbench、FlowGraph 编辑器、Monitor 与自定义 Inspector了解编辑器行为或排查工具问题
Demo/预设内容、战斗场景、棋盘 UI、表现层脚本、音频与参考行为图学习完整接线方式或验证功能
Integrations/GES/TG_GES_INSTALLED 启用后的 GES 事件桥接项目同时使用 GameEventSystem 时
Docs/指向在线文档的包内入口从 Unity Project 窗口打开文档时
Samples~/CustomNodes/两个完整示例与一个可复制节点模板扩展自定义 FlowGraph 节点时
Changelog.md当前版本已经交付的核心能力升级前核对版本变化时
Readme.txtLICENSE.txt常用入口、支持方式与授权范围初次导入或确认使用边界时

日常内容创作不需要直接修改 Runtime/Editor/,卡牌、卡组、单位、状态与遭遇战都从 Workbench 创建和维护,代码目录只在 API 接入、扩展与问题定位时作为实现依据

Demo 是一套完整的参考项目

Demo/ 把内容数据、场景接线与运行时表现组织成一套可以直接运行、逐层拆解的卡牌肉鸽战斗,Demo/Scenes/ 按 Hunter、Mage、Priest 与 Warrior 四个职业分组,每个职业都包含普通、精英与 Boss 三场战斗,12 个场景统一采用 <序号>-<名称>.unity 的命名,例如Hunter职业对应的演示Demo如下:

Demo/Scenes/Hunter/1-Fenmoss Hollow.unity
Demo/Scenes/Hunter/2-The Spore Bog.unity
Demo/Scenes/Hunter/3-Mire of the Reaper.unity

这些场景引用 Demo/Databases/ 中的六个预设数据库,再由 Demo/Scripts/Demo/Content/ 提供棋盘、手牌、单位、HUD、意图、状态、奖励、音频和视觉效果

六个预设数据库

Demo/Databases/ 中的数据库覆盖 GCS 的六类核心内容

数据库资产提供的内容
PresetCardDatabase随包卡牌与卡牌行为图
PresetDeckDatabase四个职业的初始卡组与奖励卡组
PresetPlayerUnitDatabase四个可玩职业单位
PresetEnemyUnitDatabase12 场战斗使用的敌人单位与行为图
PresetStatusDatabase战斗中的增益、减益与规则状态
PresetEncounterDatabase12 个遭遇战、敌方阵容、战斗规则与奖励

Demo Databases 中的六个预设数据库资产

提示

资产即使已经存在于磁盘,只要没有加入活动数据库,就不会出现在对应的内容集合中

注册、排序与 Active 规则见数据库设置

表现资产按所属对象组织

目录存放内容
Cards/<Type>/Basic、Burst、Curse、Skill 与 Support 的类型底图、Artwork 和卡牌 Prefab
Decks/四个职业的初始卡组与奖励卡组图像
Units/Player/<Class>/Hunter、Mage、Priest 与 Warrior 的玩家单位美术与 Prefab
Units/Enemy/<Family>/按职业敌人族组织的美术与 Prefab
Units/Prefabs/多个单位共同使用的表现组件
Statuses/Intents/状态、意图图标,以及各自的 UI Prefab
Encounters/<Class>/每个职业的战斗背景、分层素材与遭遇战 UI 资产
Art/跨对象共享的 Audio、Fonts、Materials、Prefabs、Resources、Shaders、Sprites 与 VFX

这种结构会让一个对象的内容尽量聚合在一处,因此,想要替换某个卡牌类型、敌人族或职业表现时,可以沿着所属对象直接找到关联资产,不必在全局 Prefab、Audio 与 Texture 目录之间来回搜索

配方资产与自定义节点示例

Demo/DocumentationRecipes/ 保存卡牌、敌人与状态参考页使用的行为图资产,目录中的内容与常用卡牌模式常用敌人模式常用状态模式逐项对应,Samples~/CustomNodes/ 则提供 HealIfBelowHalfNode.csAddValuesNode.csFlowNodeTemplate.cs

提示

结尾的 ~ 会让 Unity 忽略该目录,因此示例不会直接编译进项目,也不会出现在普通 Project 视图中

需要扩展节点时,把模板复制到自己的运行时程序集再修改副本,属性、继承关系、端口与执行上下文的完整约定见自定义节点

把正式内容放进项目数据根目录

Workbench 与 GameCardManager Inspector 创建自定义数据库时,会默认使用

Assets/TinyGiantsData/GameCardSystem/

六类数据库各自进入固定子目录,数据库内创建的内容会作为该数据库的子资产保存

子目录保存内容
CardDatabases/自定义卡牌数据库及其中的卡牌
DeckDatabases/自定义卡组数据库及其中的初始卡组、奖励卡组与其他卡组
PlayerUnits/自定义玩家单位数据库及其中的玩家单位
EnemyUnits/自定义敌人数据库及其中的敌人单位
StatusDatabases/自定义状态数据库及其中的状态
EncounterDatabases/自定义遭遇战数据库及其中的遭遇战

点击 Game Card System 面板中的 Quick Access > Custom Data,会直接打开 GCS 当前识别到的项目数据根目录

如果项目已有自己的资产规范,可以在 Assets/ 内整体移动 TinyGiantsData/GameCardSystem/,移动后仍要保留 TinyGiantsDataGameCardSystem 这两级目录名,GCS 会通过其中的 Card Database 重新定位实际路径

保持包内容与正式内容分离
  • 随包 Demo 适合作为可以运行的参考基线,不适合作为正式项目的工作区

  • 在自定义数据库中创建自己的内容,再引用需要复用的 Demo 美术、Prefab 或行为图

  • 这样处理后,包更新不会覆盖项目数据,预设内容也会继续保留为可对照的原始版本

目录边界明确后,第一场战斗会沿着一场完整 Demo 说明这些数据库、场景对象与表现资产如何共同运行,Demo 概览则可以继续查看四个职业、12 个场景与随包内容的对应关系