对每个部分执行不同的运动管理

[最后更新时间:2022/10/06]

Cubism SDK for Java 目前是 alpha 版本。beta 版和正式版的规格可能会有所变化。

在这个页面上,为了实现左右手不同的运动管理,
作为增加 LAppModel 的 CubismMotionManager 的占有率并将其合并到 LAppmodel.update 中的示例,
让我们看一下管理和创建动作时要注意的点。

 

 

增加 CubismMotionManager 的原因

CubismMotionManager 能够播放多个临时动作以适应淡入淡出。
但是,开始播放的 API 会淡出正在播放的动作并结束,所以
没有保持并行播放动作的功能。

为了解决这个问题,准备多个运动管理器实例,
通过划分要回放的运动管理器来实现并行运动回放。

 

增加CubismMotionManager

添加运动管理器

首先,我们看一下程序端的实现。
首先要做的是向您的模型追加一个管理类。
我们将 CubismMotionManager 追加到示例 LAppModel。
此外,将生成处理添加到构造函数。

 

 

更新过程

还要添加到更新过程中,以便播放的动作影响参数。

在 LAppModel.update 中添加时,确保将 updateMotion 放在 _model.loadParameters(); 和 _model.saveParameters(); 之间。
此外,多次运行 updateMotion 可能会导致更新重复的参数。
请注意,在这种情况下,稍后执行的 updateMotion 的内容优先。

 

开始播放

然后,通过复制和重构 startMotion 函数添加的运动管理器,可以指示运动回放。
请注意,startHandMotion 函数将运动管理器指定为参数。
在以下示例中,仅播放 .motion3.json 中指定的动作(由 preLoad 函数加载的动作)。

 

Motion Play 将碰撞箱添加到您的模型中,以便可以通过点击来激活它们。

 

 

负责参数的分布

如更新过程所示,如果多个要播放的动作之间的参数重叠,则后面执行的更新内容将被优先执行,参数将被覆盖。
为此,在使用多个运动管理器时,需要决定哪个运动管理器负责哪个部分的运动,以及哪个参数操作负责。

 

在上面的视频中,在高优先级的运动管理器(负责左右手臂运动)播放完后,低优先级的运动管理器(负责整个模型的空闲运动)改变左右手臂的参数. 这是一个更新的例子。
如果您希望在运动完成播放后立即将更高优先级运动管理器更新的参数保持在状态,这不是一个理想的表示。
当在由具有低优先级的运动管理器播放的运动数据中为不打算作为更新目标的参数设置参考值时,可以看到这种现象。
此时,通过将要更新的参数对每个运动数据进行分离,可以将具有较高优先级的运动管理器更新的参数保持在播放结束后的状态。

 

是否分离每个参数或假设覆盖
在创建运动之前明确定义规范非常重要,以免进行巨大的修正。

© 2010 - 2022 Live2D Inc.