关于运动

[最近更新时间:2022/01/06]

 

播放动作所需的类

1. 保存运动数据并对模型进行操作的类

创建实例(读取 motion3.json 文件)

b. 如何播放动作的设定

c. 销毁实例

2.运动管理类

a. 创建实例

b. 动作播放

c. 模型参数更新

d. 运动结束

e. 接收用户触发器

 

1-a. 创建运动实例(加载.motion3.json文件)

使用派生自 ACubsimMotion 类的 CubismMotion 类来播放动作。
用于运动的数据是扩展名为“.motion3.json”的运动文件。
Cubism 2.1“.mtn”不能使用。
使用 Native (C ++) CubismMotion :: Create 函数或 Web (TypeScript) CubismMotion.create 函数来读取这个 .motion3.json 文件。
加载一次 json 文件,然后将缓冲区和大小传递给加载。

 

 

1-b. 每个动作文件的播放方法设定

以下项目主要是为运动设定的。
您可以在不进行这些设定的情况下播放它。

* 运动开始时的淡入时间

使用 Native (C++) 的 ACubismMotion :: SetFadeInTime 函数或 Web (TypeScript) 的 ACubismMotion.setFadeInTime 函数设定,
您可以使用 Native (C ++) ACubismMotion :: GetFadeInTime 函数或 Web (TypeScript) ACubismMotion.getFadeInTime 函数来获取它。
以秒为单位指定淡入时间。

* 运动结束时的淡出时间

使用 Native (C++) 的 ACubismMotion :: SetFadeOutTime 函数或 Web (TypeScript) 的 ACubismMotion.setFadeOutTime 函数设定,
您可以使用 Native (C++) 的 ACubismMotion :: GetFadeOutTime 函数或 Web (TypeScript) 的 ACubismMoiton.getFadeOutTime 函数来获取它。
以秒为单位指定淡出时间。

*循环播放开/关

使用 Native (C++) void CubismMotion :: IsLoop (csmBool loop) 函数或 Web (TypeScript) CubismMotion.setIsLoop 函数设定,
您可以使用 Native (C ++) csmBool CubismMotion :: IsLoop () 函数或 Web (TypeScript) CubismMotion.isLoop 函数获取当前值。
如果设定为true,它将从头到尾播放。
它会无限循环,直到另一个运动中断或调用结束命令。
如果未设定,则初始值为 false(不循环)。

* 框架循环行为不保证与编辑器循环行为完全匹配。
* 目前,Animator 无法在 motion3.json 文件中反映循环设定,所以
框架会忽略 motion3.json 文件中的循环设定并将其设定为 false。

设定示例(* 请在播放动作前进行这些设定)

1-c. 销毁实例

Cubism SDK for Web 不需要显式销毁。

 

如何从文件中设定运动的淡入淡出值

A, 如何在 .motion3.json 文件中设定一个整体值(整体淡入淡出)

B、如何在.motion3.json文件中设定为单独的参数值(参数fade)

C、如何在.model3.json文件中设定为一个整数

共有三个,优先级按 B、C、A 的顺序应用。
如果两者都没有指定,则设定默认值1秒。

 

 

 

2-a. 创建运动管理类的实例

要将上一节中创建的 CubismMotion 类的实例应用(动画)到模型,请使用 CubismMotionManager 类。

 

 

2-b. 动作播放

使用 Native (C ++) CubismMotionManager :: StartMotionPriority 函数或 Web (TypeScript) CubismMotionManager.startMotionPriority 函数来播放动作。

第一个论点:ACubismMotion 实例,运动数据

传递运动数据的实例。
此参数可以是 CubismMotion 和 CubismExpressionMotion 的实例,它们是 ACubismMotion 的派生实例。
通常,一个运动管理器只处理一种实例类型。

第二个论点:Boolen, 自动删除标志

播放结束时自动删除运动数据的标志。
用于只播放一次的动作。

第三个论点:整数,优先级

指定 CubismMotionManager 管理的播放的优先级设定。
按优先级拒绝必须在 CubismMotionManager 之外完成。
有关优先级,请参阅页面底部的 Cubism Motion Manager 部分。

如果要同时播放多个动作,请增加 CubismMotionManager 实例的数量。
这可以用来分别控制右手和左手的运动。
同时播放动作时,尽量不要设定相同的参数。
在这种情况下,最后更新的运动参数将生效。
此外,褪色可能不会干净地应用。

 

2-c. 模型参数更新

使用 Native (C++) 的 CubismMotionManager :: StartMotionPriority 函数或 Web (TypeScript) 的 CubismMotionManager.startMotionPriority 函数
该模型不仅仅通过播放动作来制作动画。
为模型设定当前播放动作的参数,
在每次绘图时调用 Native (C++) CubismMotionManager :: UpdateMotion 函数或 Web (TypeScript) CubismMotionmanager.updateMotion 函数。

第一个论点:CubismModel 实例,应用运动的模型

它仅用于获取和操作参数信息。

第二个论点:浮点数,与上次执行的时间差

输入Update等计算的时间差。
Float 以秒为单位输入实数。 在1/60 秒内输入 0.016,以 60FPS 执行,在1/30 秒内输入 0.03,以30FPS 执行。

 

您可以通过调整输入的 deltaTimeSeconds 来减慢、停止和快进。
但是,负值的反向播放是在考虑范围之外设计的。

 

 

2-d. 运动结束

播放时间过后,动作将自动结束,
如果你想随时结束,Native (C++) CubismMotionQueueManager::StopAllMotions 函数,
或者使用 Web (TypeScript) CubismMotionQueueManager.stopAllMotions 函数。
如果您同时播放两个或多个动作,例如在淡入淡出的中间,请将它们全部结束。

 

 

2-e. 接收Event

当播放为动作设定的“Event”时,
CubismMotionQueueManager 中的Native (C++) SetUserTriggerCallback 函数,
或者,您可以使用 Web (TypeScript) 的 setUserTriggerCallback 函数注册的回调来接收调用。
只能注册一个回调。
当你想调用一个实例的函数时,用实例的指针注册一个静态函数并注册它。
确保使用静态函数中注册实例的指针调用目标函数。
如果您想要多个操作,请从一个回调中按顺序调用它们。

CubismUserModel 类默认内置了这种机制。
本机(C ++)(CubismUserModel :: UserTriggerEventFired 函数,CubismUserModel :: CubismDefaultUserTriggerCallback 函数)
或 Web (TypeScript) (CubismUserModel.cubismDefaultUserTriggerCallback 函数)

 

自动删除动作

如果在调用 Native (C++) 的 CubismMotionQueueManager :: StartMotion 函数或 Web (TypeScript) 的 CubismMotionQueueManager.startMotion 函数时将第二个参数 autoDelete 放入 true,
当动作完成播放时,该动作与 CubismMotionQueueEntry 的删除一起被删除。
它旨在用于仅播放一次的文件。

 

 

CubismMotionQueueManager 和 CubismMotionManager 类

运动管理类包括 CubismMotionQueueManager 类,
有一个从 CubismMotionQueueManager 类继承的 CubismMotionManager 类。

 

CubismMotionQueueManager

CubismMotionQueueManager 负责淡化运动值的兼容性。

使用 Native (C++) 的 LAppModel :: StartMotion 函数或 Web (TypeScript) 的 LAppModel.startMotion 函数追加动作播放时已经在播放的动作组
StartFadeout 提前结束时间。

通过该操作,正在播放的动作淡出并切换到新动作。

 

 

CubismMotionManager

CubismMotionManager 类具有保存要播放的动作的优先级的功能和将要播放的优先级注册为整数的功能。
设想通过将其与记录的优先级进行比较来创建一个调节低优先级运动播放的功能。
有必要在 Cubism Motion Manager 之外准备调节播放的部分。

Native (C++) LAppModel :: StartMotion 函数或 Web (TypeScript) LAppModel.startMotion 函数支持从异步线程播放。
播放优先级在函数开始时由 SetReservePriority 或 ReserveMotion 注册。
接下来执行读取,但是如果异步调用这个函数,则在开头注册了优先级,所以
其他低优先级播放在加载期间由其他线程调节。

播放结束时,优先级固定为0,其他控件留给外部。

© 2010 - 2022 Live2D Inc.