Schema de Remote Config que produz JSON pronto pra um C# reader consumir.
Exportar skills pro Unity#
Cenário: você modelou skills no GDD Manager e precisa que o jogo Unity carregue isso em runtime. Resposta: monte um exportSchema que itera skills + nested effects, e use JsonUtility.FromJson no C# pra deserializar.
Schema do Remote Config#
Adicione um addon exportSchema numa página dedicada (ex.: "📤 Skills Export"). Monte essa árvore:
{
"skills": [ ← array, source: skills:<DATA_ID_DO_SKILLS_ADDON>
{ ← objeto template
"id": → skillField/id
"name": → skillField/name
"kind": → skillField/kind
"cooldown": → skillField/cooldownSeconds
"tags": → skillField/tagsCsv
"costs": [ ← array, source: skillCosts
{
"type": → skillCostField/type
"amount": → skillCostField/amount
"currency": → skillCostField/currencyRef (resolve dataId)
"attribute": → skillCostField/attributeKey
}
],
"effects": [ ← array, source: skillEffects
{
"name": → skillEffectField/resolvedName
"profile": → skillEffectField/resolvedDefinitionsRef
"key": → skillEffectField/resolvedAttributeKey
"mode": → skillEffectField/resolvedMode
"value": → skillEffectField/resolvedValue
"duration": → skillEffectField/resolvedDurationSeconds
"tick": → skillEffectField/resolvedTickIntervalSeconds
"stacking": → skillEffectField/resolvedStacking
"temporary": → skillEffectField/resolvedTemporary
}
]
}
]
}
JSON exportado (exemplo)#
{
"skills": [
{
"id": "DATA_FIRE_BALL",
"name": "Fireball",
"kind": "active",
"cooldown": 5,
"tags": "fire,magical,aoe",
"costs": [
{
"type": "attribute",
"amount": 30,
"currency": "",
"attribute": "mana"
}
],
"effects": [
{
"name": "Fireball Impact",
"profile": "DATA_BASIC_ATTR",
"key": "hp",
"mode": "add",
"value": -30,
"duration": 0,
"tick": 0,
"stacking": "stack",
"temporary": false
},
{
"name": "Fireball Burn",
"profile": "DATA_BASIC_ATTR",
"key": "hp",
"mode": "add",
"value": -2,
"duration": 6,
"tick": 1,
"stacking": "unique",
"temporary": true
}
]
}
]
}
Reader em C# (Unity)#
Crie classes que espelham o JSON:
[System.Serializable]
public class SkillData {
public string id;
public string name;
public string kind; // "active" | "passive"
public float cooldown;
public string tags; // CSV — split no runtime
public CostData[] costs;
public EffectData[] effects;
}
[System.Serializable]
public class CostData {
public string type; // "currency" | "attribute" | "charges"
public float amount;
public string currency; // dataId ou "" quando type != currency
public string attribute; // key do atributo ou "" quando type != attribute
}
[System.Serializable]
public class EffectData {
public string name;
public string profile; // DATA_BASIC_ATTR — qual perfil de atributos
public string key; // hp / atk / mana
public string mode; // "add" | "mult" | "set"
public float value;
public float duration;
public float tick;
public string stacking; // "unique" | "refresh" | "stack" | ""
public bool temporary;
}
[System.Serializable]
public class SkillsRoot {
public SkillData[] skills;
}
// Carregando
public static SkillsRoot LoadSkills(string jsonText) {
return JsonUtility.FromJson<SkillsRoot>(jsonText);
}
Onde colocar o JSON#
3 opções comuns:
Resources/— bundle estático no build, carrega comResources.Load<TextAsset>. Simples, mas precisa rebuild pra atualizar.StreamingAssets/— arquivo solto no build, carrega comFile.ReadAllText. Melhor pra patches.- Remote Config service (Firebase, PlayFab) — carrega da nuvem, atualiza sem patch. Mais infra, mais flexibilidade.
Pra protótipo: Resources. Pra produção com live ops: Remote Config service.
Checklist pré-export#
Antes de gerar o JSON e mandar pro Unity, valide:
- Toda skill tem
dataIddefinido (senão oidvem vazio) - Toda página de Atributos tem
dataId - Toda moeda tem
dataId - Custos do tipo
attributetêmdefinitionsRefpreenchido - Efeitos da skill apontam pra modifiers que ainda existem (sem refs órfãs)
Veja também#
- Remote Config — referência completa do bloco
skills— sources e bindings de skill no schema- Burst + DoT — modela a Fireball que aparece neste exemplo