跳到主要内容

卡牌创作

Guide

在一份 GameCard 资产中配置卡牌数据、卡面和 Behavior,并验证它在战斗中的实际结果

要让卡牌进入卡组、要求正确的玩家操作并在战斗中按预期结算,需要把卡牌数据、卡面与 Behavior 保存在同一份 GameCard 资产中,开始创作前,场景需要由 GameCardManager 启用至少一个 Card Database,数据库配置决定 Game Card Editor 能够列出和编辑哪些数据库的卡牌

打开 Game Card Editor

Tools > TinyGiants > GCS > Game Card Editor

在窗口顶部选择 Card,当前项目的卡牌资产、编辑字段与检查结果会进入同一个三栏工作区

Game Card Editor 的 Card 模式,左侧为 List,中间为 Inspector,右侧为 Preview

上图把卡牌的资产定位、规则编辑和结果检查放在同一窗口中,左侧 List 决定当前编辑对象,中间 Inspector 保存 BasicVisualBehavior,右侧 Preview 随当前选择同步显示数据摘要、模板渲染、行为主路径与外部引用,后续所有操作都以 List 中的当前选择为起点,因此要先确认卡牌所在的 Card Database,再创建、复制或定位具体资产

选择待编辑的卡牌

列表操作

操作使用方式与结果
选择数据库在列表顶部选择 Card Database,后续创建、粘贴和排序都作用于当前数据库
创建+ 会在当前数据库内创建以 NewCard 为基名的 GameCard 子资产,同名资产存在时自动追加序号,初始值为 1 CostCommonTarget = None
复制复制按钮会完整复制当前卡牌;相近卡牌共用分类、视觉模板或 Behavior 结构时,可以从副本继续修改,保留已经确认的基础配置
删除 会在确认后删除所选资产
搜索与筛选搜索框按卡牌显示名筛选,Name 非空时使用该值,留空时回退到资产名;TypeRarityKeywordsTags 可以继续缩小范围
排序与拖动排序按钮在数据库原顺序、名称升序与名称降序之间切换;拖动卡牌行只改变数据库中的创作顺序,不会改变起手或抽牌顺序
批量操作使用 Ctrl/CmdShift 多选卡牌,再执行 DuplicateTag +Tag −Delete
跨数据库复制Ctrl/Cmd+C 复制当前选中的一张卡牌,切换到另一个已启用的 Card Database 后,使用 Ctrl/Cmd+V 粘贴副本

Card List 显示 PresetCardDatabase、创建与复制按钮、筛选器以及当前卡牌行

列表顶部显示的 80 对应随包 PresetCardDatabase 中可直接检查和修改的 80 张卡牌,它们覆盖 5 套 Template、5 个内置关键词与 4 条直接升级关系,完整清单见 Demo 内容索引

配置卡牌的基础规则

Basic 会把玩家需要识别的信息、出牌交互与项目分类集中到同一组字段中

字段配置内容
Name玩家看到的名称,非空值也会同步成为卡牌子资产名
Description卡面与 Display 使用的规则文本,输入 { 会列出已注册的 Description Token,最终内容必须与 Behavior 一致
Cost基础能量费用,编辑器会限制为 0 以上,战斗中的实际费用仍以 Hook 与费用规则计算结果为准
Type用于着色、筛选和项目逻辑的分类,可以选择当前项目已有值,也可以输入自定义值
Rarity可以选择当前项目已有值或输入自定义值,空值会回到 Common
Target出牌 UI 收集目标的方式,必须与 Behavior 实际解析范围保持一致
Tags项目自定义标签,本身没有内置玩法,只有被 FlowGraph 或代码读取后才会产生规则作用
Keywords来自 CardTagRegistry 的注册关键词,五个内置项具有运行时规则,自定义项需要项目逻辑消费其 ID
Upgrade当前卡牌的直接升级体,None 表示没有升级关系

Decapitate 的 Basic 数据,费用为 3,Target 为 Single Enemy,Tags 为 Attack

完成图中配置后,Decapitate 是一张费用为 3、类型为 Basic、稀有度为 CommonAttack 卡牌,玩家打出它时需要选择一个敌人;具体结算效果仍由 Behavior 决定

保持 Target 与 Behavior 的目标范围一致

Target 仅决定出牌 UI 如何收集目标,它不会为 Behavior 创建目标,运行时也不会仅凭该字段完成目标合法性校验,最终的作用对象仍由 FlowGraph 节点的输入端口或 UnitSource 决定,例如 Target 使用 Single Enemy 而 Behavior 解析 All Enemies 时,UI 仍会要求玩家选择一个敌人,但结算会忽略这次选择并作用于所有敌人,四种 Target、UnitSource、已连接 Target Port、Card Source、Selector 与空结果的完整边界见目标选择

配置卡牌关键词

出牌交互确定后,Keywords 会继续决定卡牌在起手、手牌、结算与回合结束时怎样流转

Keyword运行时规则
Exhaust主动打出并执行 On Card Played 后进入消耗堆,同时触发 On Card Exhausted
Ethereal回合结束时仍在手牌中会先被消耗,与 Retain 同时存在时由 Ethereal 优先
Retain当规则会在回合结束弃掉手牌时保留该牌并触发 On Card Retained,若遭遇规则本就保留全部手牌,未带该词条的牌也会留下
Innate洗牌后优先进入起手范围,数量超过起手容量时会随机选择能够进入起手的部分
Unplayable不能被主动打出,但仍可抽取、保留,并通过其他生命周期入口执行 Behavior

Keywords 选择器会读取 CardTagRegistry,项目可以注册新的 Card Tag 并让它出现在同一菜单中,扩展方式见卡牌类型、标签与描述 Token

基础规则确定后,在 Visual 中绑定 Icon 与 Template,供列表、Preview 和项目表现层使用

配置卡面资源

Decapitate 绑定插画 Sprite 与 Basic Template 后,Game Card Editor 才能同时检查紧凑信息卡与完整卡面

Decapitate 的 Visual 数据,Icon 使用 Decapitate,Template 使用 Basic

Icon 会进入 List 与 Display,Template 则决定 Render 实例化哪套卡面结构,缺少 Template 时 Render 只会显示绑定提示,不会生成可用的占位卡牌

Render 对 Template 的约定

Render 只会在 Template 根对象的直接子级中查找约定名称

子对象与组件预览行为
Artwork + SpriteRenderer写入当前 Icon
EnergyTypeNameDescription + TMP_Text写入对应的静态文本
Glow + GameObject鼠标悬停 Render 时切换显示

当缺少约定对象或组件时,Render 会直接跳过而不会报告校验错误,因此,这套约定只负责 Game Card Editor 的静态模板预览,项目或 Demo 的运行时卡面仍需由表现层完成实例化与数据绑定,具体接入方式请见自定义 UI 集成

静态卡面完成后,就该在 Behavior 中编排卡牌的实际结算规则了

编排卡牌 Behavior

点击 Edit FlowGraph 会打开当前卡牌内嵌的 Behavior,在这里编辑卡牌自身持有的行为:

Behavior 区显示 Edit FlowGraph 按钮与 OnCardPlayed 入口标签

按钮下方的 OnCardPlayed 标签确认当前 Behavior 至少包含一个出牌入口,点击标签或按钮进入 FlowGraph Editor

以下图为例,Poison Arrow 把同一入口扩展为伤害、命中表现、状态变化与施毒表现,Description 中的两项规则因此都能在 Behavior 中找到对应节点

Poison Arrow 从 On Card Played 开始,依次造成 3 点伤害、播放命中表现、施加 2 层 Poison 并播放状态表现

On Card Played 先执行 Deal Damage,对当前 Opponent 造成 3 点伤害,第一组 Play Effect 播放命中反馈,Change Status 再施加 2 层 Poison,最后一组 Play Effect 播放状态反馈,Description 应与这条路径保持一致,例如 Deal 3 damage. Apply 2 Poison.

更复杂的分支、循环与组合可以继续参考 FlowGraph 模型常见卡牌配方

完成 Behavior 检查后,回到 Game Card Editor 并重新选择 Decapitate,右侧 Preview 会从静态数据、模板结构与入口主路径三个层面检查这张卡

检查卡牌预览

Display:检查静态数据

Display 会把 IconName、原始 DescriptionEnergyCostTypeRarityTagsKeywords 组合成紧凑信息卡,它不会显示 TargetUpgrade、动态描述或战斗中的有效费用

Decapitate 的 Display 显示图标、名称、类型、稀有度、描述、3 Cost 与 Attack 标签

Render:检查模板结构

Display 只检查数据摘要,Render 会在隔离预览中实例化 Template,以便你可以直接在窗口内观察它

Decapitate 的 Render 显示由费用、插画、名称与规则文本组成的完整卡面

卡面中的费用 3、插画、名称 Decapitate 与规则文本已经进入 Basic Template,这能确认静态模板结构与排版,但 Render 对 Description 只会用样例值替换 {Damage}{Block}{Heal}{Stacks:Burn},自定义 Token 和真实战斗数值仍要在运行时通过 GCSApi.FormatDescription 检查

Behavior Summary:检查入口主路径

模板结构确认后,Behavior Summary 会从每个顶层 Entry 的 Out 端口向后追踪一条直链,最多显示 8 个节点,用来快速辨认入口与主路径

Behavior Summary 将 OnCardPlayed 的主路径概括为 DealDamage → Group

OnCardPlayed → DealDamage → Group 说明当前卡牌拥有一条从出牌入口进入伤害与表现组的主路径,而分支、其他控制端口与 Group 内部细节不会在这里完整展开

三个 Preview 面板分别确认了静态数据、模板结构和 Behavior 主路径,修改共享卡牌前,还要检查它在已启用内容中的引用范围

检查资产引用

Used By 会扫描当前场景 GameCardManager 启用的数据库,并列出能够识别的卡组条目、直接升级关系与部分 Behavior 引用

Used By 显示四个 Deck 引用与 Heavy Strike 的升级关系

如上图所示,DecapitateBloodforged FuryCataclysm CodexApex PredatorDivine Ascension 四个 Deck 收录,Heavy Strike 的直接升级体也指向它,修改或删除这张卡会同时影响这些内容:

  • Deck 引用会包含卡牌份数,Card 引用会显示直接升级关系,Behavior 扫描会检查已启用 Card、Status 与 Enemy 的公开字段
  • 点击条目可以在 Game Card Editor 的对应模式中打开所属资产
提示

Used By 是当前启用数据库内的辅助扫描,不覆盖未启用数据库、场景、Prefab、项目代码、私有字段、运行时动态查找或自定义间接引用,也不会阻止删除,涉及公开资产或自定义代码时仍需执行项目级引用检查

处理校验问题

级别触发条件
ErrorName 为空
WarningType 为空、Description 为空、Template 缺失、Behavior 没有节点,或 FlowGraph 存在结构问题

右上角 Issue Badge 统计当前所选 Card Database 中的全部问题,打开列表后可以跳转到对应字段或 FlowGraph,不过Target、Description 与 Behavior 的一致性、升级循环、Template 子对象约定和真实战斗结果都不属于自动校验范围,清除 Issue 后仍需继续人工复核

人工检查清单

  • 列表行能够仅凭图标、名称、分类、费用与标签辨认卡牌

  • Target、Description 与 Behavior 表达同一项结算

  • Display 数据完整,Render 中没有缺图、错位或漏字

  • Behavior Summary 包含预期入口,原图中的参数与分支已经复核

  • Used By 中的已知引用符合预期,项目级间接引用已经另行检查

静态数据、模板、行为与引用全部通过检查后,再进入 Play Mode,用真实战斗来验证费用、目标、数值、状态与牌堆流转是否成立

在 Play Mode 验证结算

在随包 Demo 的第一场战斗中打出 Poison Arrow,同一次出牌会消耗 1 点能量,对 Plague Stalker 造成 3 点伤害,施加 2 层 Poison,再把卡牌移入弃牌堆

Poison Arrow 结算后,敌人剩余 13/16 HP 并获得 2 层 Poison,玩家剩余 2 点能量,弃牌堆为 1

敌人生命值从 16 降至 13Poison0 增至 2,对应 Behavior 中的伤害和状态节点,玩家能量从 3 降至 2,弃牌堆从 0 增至 1,说明费用支付和结算后的移牌流程也已生效

结果与预期不一致时,可以在 Game Card Monitor中同时检查当前手牌、四个牌堆、阶段、单位状态与事件时间线,再回到产生差异的字段或节点

项目 UI 应从实时 CardInstance 读取卡面、有效费用与格式化描述,并通过受支持的 API 或 FlowGraph 节点修改牌堆,牌堆行为见卡牌与牌堆生命周期,代码入口见 API 使用指南

完成校验和 Play Mode 验证后,这张卡已经具备完整数据、可见卡面、可执行 Behavior 和明确的引用关系,继续阅读卡组创作,把卡牌与份数组装成起始卡组或奖励卡池