Skip to content

场景资源预设 JSON 格式

用于导入导出场景资源(Live2D / Spine / 图片差分)的状态预设和动作预设。

顶层结构

json
{
  "version": 1,
  "kind": "cubism",
  "presentation": {
    "states": [],
    "actions": []
  }
}
字段类型必填说明
versionnumber固定为 1
kindstring资源类型:cubism / spine / image_variant。用于导入时校验。
presentationobject预设容器

presentation.states(状态预设)

每个状态预设的字段:

字段类型必填说明
namestring状态名称,同一资源内不可重复
animationstring绑定的动画名称(仅 Cubism / Spine)
expressionstring绑定的表情名称(仅 Cubism)
skinstring绑定的皮肤名称(仅 Spine)

presentation.actions(动作预设)

每个动作预设的字段:

字段类型必填说明
namestring动作名称,同一资源内不可重复
playNamestring要播放的动画名称(仅 Cubism / Spine)

关于 kind

  • cubism:Live2D Cubism 模型,支持 animation / expression 绑定。
  • spine:Spine 骨骼动画,支持 animation / skin 绑定。
  • image_variant:图片差分,不支持 presentation 块(图片差分使用 variants 字段,不在本格式中处理)。

kindimage_variant 时,presentation 应为空对象或 states / actions 均为空数组。

最小示例

json
{
  "version": 1,
  "kind": "cubism",
  "presentation": {
    "states": [
      {
        "name": "默认",
        "animation": "idle",
        "expression": "neutral"
      }
    ],
    "actions": []
  }
}

完整示例

json
{
  "version": 1,
  "kind": "cubism",
  "presentation": {
    "states": [
      {
        "name": "默认",
        "animation": "idle",
        "expression": "neutral"
      },
      {
        "name": "微笑",
        "animation": "idle",
        "expression": "smile"
      },
      {
        "name": "害羞",
        "animation": "blush",
        "expression": "shy"
      },
      {
        "name": "生气",
        "expression": "angry"
      }
    ],
    "actions": [
      {
        "name": "打招呼",
        "playName": "greeting"
      },
      {
        "name": "点头",
        "playName": "nod"
      }
    ]
  }
}

AI 生成约束

  • kind 必须与当前编辑的资源类型完全匹配,否则导入失败。
  • states 中的 name 不能重复;actions 中的 name 不能重复。
  • animation / expression / skin / playName 的值必须是该资源实际可用的动画/表情/皮肤名称,否则保存时会提示"无效动画"等错误。
  • 对于 cubism 类型的资源,animationplayName 的取值来自资源的 motionGroups
  • 对于 spine 类型的资源,animationplayName 的取值来自资源的 animations

常见错误

  • kind 写成了资源的存储值(如 "image")而不是 "image_variant" → 校验失败
  • image_variant 类型下填写了 states → 会被忽略
  • 状态名称重复 → 保存时提示重复
  • 绑定的动画名称在资源中不存在 → 保存时提示"选择了无效动画"