跳到主要内容

内容模型

GCS · Core Concepts

GCS 内容由一组可创作资产组成:卡牌、卡组、状态、单位和遭遇战。运行时通过六个数据库家族发现这些内容。

适用于批量创作内容前建立对象模型;也适用于排查资产存在于磁盘上、但未出现在选择器或战斗中的问题。

GCS 内容由少量可创作对象组成,每个对象都回答一个面向用户的问题:

用户问题GCS 对象
玩家可以打出什么?Card
玩家开局使用或从奖励中获得什么卡组?Deck
哪个临时规则挂在单位身上?Status
玩家可以控制谁?Player unit
出现哪些敌人,它们如何行动?Enemy unit
一个场景应该启动哪场战斗?Encounter
哪些全局战斗规则生效?Battle rules(遭遇战的一部分)
运行时从哪里发现内容?Database

每个对象都住在六个数据库家族之一里,场景的 GameCardManager 从这些数据库读取内容:


可创作对象

对象拥有的内容
Card名称、费用、类型、目标模式、标签、美术图和打出时行为
Deck一组有顺序或经过筛选的卡牌定义
Status层数规则、衰减规则、图标、标签和反应式行为
Player unit玩家属性、头像或 prefab、初始卡组和职业身份
Enemy unitHP 范围、prefab、标签、阶级、意图和敌人回合行为
Encounter玩家单位、敌人阵容、奖励牌组、战斗规则、标签和显示数据
Database运行时可用的卡牌、卡组、状态、单位和遭遇战集合

这些对象都在同一个窗口里编辑。Workbench 给每个家族一个专属模式,每个模式都遵循同一套操作:选数据库,选条目,改字段,看实时预览。下图的 Card 模式是六个模式里最忙的一个:

Workbench 的 Card 模式:左侧数据库列表,中间卡牌 inspector,右侧实时卡牌预览


行为归属

卡牌、状态和敌人各自在 Behavior 字段中内嵌一张 FlowGraph。GCS 不需要单独的行为资产。遭遇战没有行为图;它描述参战单位、奖励和战斗规则,具体行为由参战内容自己定义。

把行为放在你正在创作其结果的那个对象上:

  • 卡牌效果属于卡牌;
  • 状态反应属于状态;
  • 敌人行动属于敌人;
  • 遭遇战层面的节奏属于遭遇战的战斗规则;
  • 项目专属的可复用行为可以实现为自定义节点。

除非行为确实需要离开 GCS,例如通知 GES 处理成就或任务系统,否则应把卡牌战斗行为保留在 GCS 内容或 FlowGraph 中。


表现资源归属

表现资源放在拥有它的对象旁边:卡牌美术放在卡牌或卡牌类型文件夹下,单位美术和 prefab 放在单位文件夹下,状态图标放在状态文件夹下,遭遇战背景放在遭遇战文件夹下。只有跨对象共享的资产(UI 图、字体、共享战斗特效)才放入 Content/Art/

demo 使用同一套纵向优先布局。一个对象及其依赖资源位于同一处,删除、复制或导出某个对象家族时更容易保持资源完整。


运行时可用性

文件存在于磁盘上,不代表它在运行时可用。资产必须属于当前场景 GameCardManager 正在使用的某个数据库。

当某个对象没有出现在选择器或运行时里时,按顺序检查:

  1. 对象确实存在;
  2. 对象位于正确的数据库中;
  3. manager 引用了该数据库;
  4. 场景使用了这个 manager 或 bootstrap 设置
优先检查数据库注册

内容未显示时,最常见原因是资产位于当前场景未注册的数据库中。项目同时使用多个数据库时,优先检查 manager 是否引用了正确数据库。


以 Demo 作为模型

Demo 把所有示例定义放在 Demo/Databases/ 下的六个预设数据库中:80 张卡牌、16 套卡组、30 个状态、12 个玩家单位、16 个敌人、12 场遭遇战。所有表现资源位于 Demo/Content/。可以把 demo 当作结构范例;生产内容应放在项目自己的数据库和文件夹中,避免 demo 更新影响自定义数据。