Skip to content

7. 资源与场景

首先什么是资源和场景?场景代表一个挂载单元,而资源代表 live2d(Cubism/Spine)、图片、立绘差分、音乐、视频这种可以添加到场景中且能通过动画控制的元素。

资源

Live2d (Cubism / Spine) 资源

当前支持的版本为 Cubism 2/3/4, Spine 3.8/4.0/4.1,且同一个场景中不能存在不同版本的 Spine。

  • Cubism 可操控的属性通常有 表情动作,也有 看向指针 的能力,例如 BanG Dream! 中的角色 live2d 就是 Cubism 资源
  • Spine 可操作的属性通常有 动画皮肤,例如 Blue Archive 中的记忆大厅、明日方舟中的小人动画等都是 Spine 资源
左图:Cubism (千早爱音),右图:Spine (蔚蓝档案记忆大厅)
左图:Cubism (千早爱音),右图:Spine (蔚蓝档案记忆大厅)

图片和立绘差分资源

当导入图片后,可以在下方点击“+添加差分图”将这个资源升级为图片差分资源,通常可以用于立绘差分等用途 (可以添加不同表情的差分图,实现和live2d一样的切换能力)

图片差分资源,可以用于创建立绘差分
图片差分资源,可以用于创建立绘差分

即使自行制作一个Live2D非常困难,但依然可以通过AI生成/调整图片、AI生成动态视频资源、去网上找对应的Live2D/立绘资源、将动画录制/渲染为视频等方式实现一定程度的场景动画。

音频和视频资源

音频(左)和视频(右)资源
音频(左)和视频(右)资源

状态预设与动作预设

状态预设与动作预设是为了统一不同资源底层能力不同而提出的。

例如可能一个Cubism资源A实现 微笑 状态是通过将表情设为 smile01,将动作设为 smile02 实现;
一个Cubism资源B实现 微笑 状态是通过将表情设为 face_smile_02,将动作设为 motion_smile_01 实现;
一个Spine资源C实现 微笑 状态是通过将动画设为 smile 实现;
一个图片差分节点D是将立绘设置为 smile.jpg 实现……

不同的资源有不同的实现微笑的方式,而为了统一,我们可以为这些资源都添加一个 微笑 的状态预设。 这样在编排动画时,我们就只需要关注将当前角色设置为 微笑 状态即可,而无需关注其底层是如何实现这一状态的。

而状态预设和动作预设的区别在于:
状态预设设状态 动画被触发时,将设置并保持这一状态(即使动画结束也会始终保持状态);
动作预设播放动作 动画播放时,将在动画期间单次播放这一动作。

在大部分时候,我们只需使用状态预设,并且通常只有涉及 Spine 资源时会使用到动作预设

如果有底层命名基本相同的资源(例如这些资源都是 Cubism,且都有 smile01 等这样相同命名的动作),只需写一次状态预设列表,其它角色可以在 JSON编辑预设 中复制粘贴即可。

状态预设(做好一个角色后其它直接复制粘贴JSON)
状态预设(做好一个角色后其它直接复制粘贴JSON)

场景

编辑器布局

  • 左侧为节点与资源面板,可以在这里直接添加资源到场景里。
  • 右侧为属性面板,可以在这里编辑节点、动画组、动画等的属性。
  • 下方为动画面板,可以在这里编辑动画组和动画。
场景编辑器
场景编辑器

手机版可通过左上角按钮展开/折叠节点与资源面板、属性面板,通过下方按钮展开/折叠动画面板。

节点属性

  • 图像节点:包括Cubism、Spine、图片、图片差分、视频

    • 看向指针(仅Cubism资源支持):即让角色目光始终跟随指针/手指。
    • 适配方式:分为 完整显示铺满屏幕,对于背景图片、Live2D记忆大厅这种需要铺满背景的内容,请选择 铺满屏幕,否则选择默认的 完整显示 即可。
    • 变换:基本都是字面意思,不过 Cubism 资源官方推荐是设置 Y=0.92, 锚点Y=0.92(即以人物身体下方处为锚点执行缩放等操作)
    • 初始状态:即初始时使用的状态预设
  • 媒体节点:包括视频、音频

    • 自动播放循环播放:通常音频加上自动播放和循环播放即可当做BGM使用,否则可以当做音效在动画组中触发播放。
  • 摄像机节点:一个特殊的节点,可以相当于同时控制所有资源的位移,通常可以场景震动效果、地图等一次只显示一部分的可以移动的场景等等效果。

角色位节点

如果角色数过多,我们希望不要一次在场景中显示所有角色,而是只显示当前发言角色时,就可以用到这个特殊节点。

在左上角节点列表中,点击添加角色位后,可以在右侧属性面板下方添加角色子位,并且可以设置初始时显示的角色以及每个角色的初始状态。

在动画面板中,我们可以对这个节点加入切角色动画,即可在不同角色间切换当前显示的角色;
也可以加入设状态播放动作动画,即可对当前显示的角色设置状态/播放动作。

角色位节点(相当于一个父节点,可以控制当前显示哪个子节点)
角色位节点(相当于一个父节点,可以控制当前显示哪个子节点)

动画与动画组

一个动画组通常对应一种事件,即类似发生事件A时触发动画组A。
而一个动画组可以包含多个动画,可以通过控制动画的播放时机(在上一动画之后/与上一动画同时)以及插入延时动画(等价于不执行任何操作的空动画),实现复杂的动画效果。

动画排列
动画排列

可以点击动画组面板右上角的“试播按钮”试播动画组,以便查看动画播放的效果
试播结束后,预览将会自动回到原来的状态

场景规则

场景规则类似于一种专门用于触发场景动画的消息规则,是将纯文本的角色扮演和场景动画联系起来的桥梁。

因此我场景规则和消息规则在一些概念上是相通的,例如消息来源、if/when表达式等。

不同之处在于:

  • 处理时机:场景规则是在消息规则全部处理完成后进行处理的。
  • 可见通道:场景规则只有用户通道,即只可影响用户可见内容。

场景规则的原理:当条件满足时触发对应的动画组

  • 如果不添加条件:只要对应通道有消息就会直接触发动画组
  • 添加文本匹配条件:当文本中匹配到对应正则表达式时触发动画组,同时执行文本替换
  • 添加if/when条件:当条件满足时触发动画组
  • 同时多种条件:需要同时满足时才触发动画组

例子

  1. 如果希望在 千早爱音 发言时,触发动画组 Anon,将角色位节点切为显示千早爱音,那么可以用:
    消息来源角色消息
    if 条件SenderName == "千早爱音"
    触发动作组Anon

  2. 如果希望在遇到文本 【微笑】 时,触发动画组 微笑,将当前角色状态设置为 微笑,那么可以用:
    消息来源角色消息
    文本匹配【微笑】 -> (空)(如果希望不在消息中显示该标记)或 【微笑】 -> $0 (如果希望在消息中保留该标记)
    触发动作组微笑

总结

总结一下,我们是如何将纯文本的角色扮演和场景资源联系起来的?

场景规则里文本匹配/条件满足 -> 触发动画组 -> 按一定顺序播放动画组里的动画 -> 设置资源的状态/属性 -> 拿着状态名称找到资源的状态预设,按照不同资源的底层能力实现状态改变

总结流程
总结流程