跳到主要内容

Demo 资源布局

GCS · Demo

Demo 内容按拥有它的对象切分,而不是按资源类型切分:卡的原画挨着卡,敌人的 prefab 挨着敌人。这一页对照的是真实的文件夹树。

往 demo 里添加资源,或者为自己的项目规划内容文件夹结构时,用这一页。

Demo/Content/ 下的一切都遵循一条规则:资源放在拥有它的对象的文件夹里。不存在收纳对象私有资源的顶层 Prefabs/Audio/VFX/ 桶。设计师编辑一张卡、一个单位或一场遭遇战时,属于它的美术、prefab 和特效就在手边。


根目录

Demo/Content/
|-- Art/ # 只放跨对象共享的资源
|-- Cards/ # 卡牌模板家族 + 每张卡的原画
|-- Decks/ # 卡组封面图标(Deck_<Class>_Start / _Reward)
|-- Encounters/ # 按职业分的遭遇战背景和视差图层
|-- Intents/ # 意图图标 + 意图 UI prefab
|-- Statuses/ # 状态图标 + 状态 UI prefab
`-- Units/ # 敌方和玩家单位的美术与 prefab

Project 窗口中的 Demo 文件夹:Content 下按对象划分的 Intents、Statuses、Units 等文件夹,以及 Databases、Scenes、Scripts


Cards

Content/Cards/
|-- Basic/
| |-- Artwork/ # 使用这个卡框的所有卡的原画(Strike.png、Defend.png 等)
| |-- Basic.png # 卡框贴图
| `-- Basic.prefab # 卡牌 prefab
|-- Burst/
|-- Curse/
|-- Skill/
|-- Support/
`-- CardGlow.png # 整个卡牌家族共享

五个文件夹就是卡牌模板家族。每个家族拥有自己的卡框贴图、卡牌 prefab,以及一个 Artwork/ 文件夹,收纳所有用该卡框渲染的卡的原画。CardGlow.png 放在 Cards/ 根目录,因为所有卡都共用它。

如果某张卡以后有了专属的 VFX、音频或动画,这些资源放到使用它们的卡牌家族之下,建 VFX/Audio/Animation/ 子文件夹。不要建 Content/VFX/Cards/ 这种桶。


Units

Content/Units/
|-- Enemy/
| |-- Enemy_Hunter/
| | |-- Enemy_PlagueStalker_Normal/
| | |-- Enemy_SporeBrute_Elite/
| | |-- Enemy_MireReaper_Boss/
| | `-- Enemy_BogPolyp_Summon/
| |-- Enemy_Mage/
| |-- Enemy_Priest/
| `-- Enemy_Warrior/
|-- Player/
| |-- Hunter/ # Avatar.png + 全身立绘 + Prefab.prefab
| |-- Mage/
| |-- Priest/
| |-- Warrior/
| `-- Shine.png # 玩家侧共享贴图
|-- Prefabs/ # 单位级共享 widget(HpWidget.prefab)
`-- Shadow.png # 所有单位共享

每个敌人在自己职业文件夹里有一个 Enemy_<Name>_<Tier> 独立文件夹,美术和 prefab 并排放在里面。每个玩家职业一个文件夹,装头像、全身立绘和单位 prefab。所有单位共用的 widget,比如 HP 条,放在 Units/Prefabs/


Encounters

Content/Encounters/
|-- Hunter/
| |-- Background.png # 场景背景
| |-- Layer/ # 视差图层
| `-- UI/
|-- Mage/
|-- Priest/
`-- Warrior/

遭遇战背景和视差图层归职业文件夹所有。场景文件本身不算内容,它们在 Demo/Scenes/<Class>/ 下。


Statuses 和 Intents

Content/Statuses/
|-- Prefabs/ # StatusWidget.prefab、StatusIconEntry.prefab
|-- VFX/ # 每个状态的施加/到期特效 prefab(25 个)
`-- Status_<Name>.png # 每个状态一个图标(共 30 个)

Content/Intents/
|-- Prefabs/ # IntentWidget.prefab、IntentEntry.prefab
`-- Intent_<Kind>.png # Attack、Buff、Debuff、Defend、Heal、Multi、Special、Unknown

Art 只放共享资源

Content/Art/ 只保留被多个对象共享的资源:

Content/Art/
|-- Animations/
|-- Audio/ # GCSMixer.mixer + Bgm、Ambience、Cards、Combat、Intents、Status、Stingers、UI、Voices
|-- Fonts/
|-- Materials/
|-- Prefabs/
|-- Shaders/
|-- Sprites/
`-- VFX/ # 共享战斗特效

音频树是"合法共享资源"最清晰的例子:一个混音器加各分类文件夹(BGM、环境音、卡牌音效、战斗打击、意图预告、状态音效、片段音乐、UI、敌人语音),每个场景都从这里走。某张卡的招牌音效就不属于这里,它应该去那张卡的家族文件夹。

注意

不要把对象的私有资源临时放进 Art/。一旦两个不相关对象引用了同一个文件夹,移动资源就意味着需要修改所有引用。先定 owner,再放文件。


新的音频、VFX、动画放哪

制作阶段产出最终表现资源时,归属规则决定去处:

资源属于放到
一个卡牌家族Content/Cards/<Family>/VFX/(或 Audio/Animation/
一个敌人它自己的 Content/Units/Enemy/Enemy_<Class>/Enemy_<Name>_<Tier>/ 文件夹
一个玩家职业Content/Units/Player/<Class>/VFX/(或 Audio/Animation/
一个遭遇战职业Content/Encounters/<Class>/VFX/(或 Audio/Animation/
多个无关对象Content/Art/VFX/(或 Audio/Animations/

对象内的子文件夹按需创建,等第一份这样的资源出现再建。给每个卡牌家族预建一个空 Audio/ 只会制造噪音。


把规则用到你的项目

这套布局对 demo 内容是强制的,对你的内容是推荐的。照搬的方法:

  1. 导入资源前先确定它属于哪个对象。
  2. 把资源放进该对象的文件夹,需要时新建子文件夹。
  3. 只有确实找不到单一 owner 时,才使用共享文件夹。
  4. 数据库和表现资源分开存放。
  5. Demo 内容和生产内容使用不同的根目录,清理 demo 时不会影响你的游戏内容。