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

[最近更新时间:2020/01/10]

在这个页面上,为了实现左右手可以并行管理不同的动作,
例如,增加 LAppModel.cubismMotionManager 拥有的数量并将其合并到 LAppModel.update 中。
让我们看一下管理和创建动作时要注意的点。

 

 

增加 CubismMotionManager 的原因

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

要解决此问题,请准备多个 Motion Manager 实例并进行准备。
通过分离要播放的运动管理器,实现了并行运动播放。

 

增加CubismMotionManager

追加了运动管理器

首先,我们看一下程序端的实现。
首先要做的是向模型追加一个运动管理类。
我们将 CubismMotionManager 追加到示例 LAppModel。
在构造函数和释放函数中追加生成和释放处理。

更新过程

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

 

在 LAppModel.update 里面追加时,在 _model.loadParameters() 和 _model.saveParameters() 之间
确保安装 updateMotion。
此外,如果您同时播放多个动作,则可能会从两个或多个动作更新相同的参数值。
在这种情况下,稍后执行的 updateMotion 的内容优先。

 

开始播放

然后,通过复制和修改startMotion系统的成员函数,使用追加的运动管理器来指示运动播放。
请注意,startHandMotion 函数将运动管理器作为参数。
在以下示例中,仅播放 .motion3.json 中指定的动作(由 preLoad 函数加载的动作)。

 

运动播放为模型追加了命中判断,使其通过点击工作。

 

 

负责参数的分布

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

 

上述视频中,左臂和右臂的参数由低优先级的运动管理器(负责整个模型的空闲运动)在高优先级的运动管理器(负责整个模型的空闲运动)播放后立即设置。左臂和右臂的运动)完成。这是一个已更新的示例。
如果您希望将高优先级运动管理器更新的参数保持在运动播放结束后立即的状态,这不是一个理想的表达方式。
当低优先级的运动管理器播放的运动数据中不打算更新的参数设定参考值时,就会出现这种现象。
此时,通过将要更新的参数对每个运动数据进行分离,可以将具有高优先级的运动管理器更新的参数保持在播放结束后立即的状态。

 

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

© 2010 - 2022 Live2D Inc.