モーションについて

最終更新[2018/05/02]

 

モーションを再生するまでの流れ

1、モーションクラス

a.インスタンスの作成(motion3.jsonファイルの読み込み)

b.設定

2、モーション管理クラス

a.インスタンスの作成

b.モーション再生

c.モデルのパラメータ更新

d.モーションの終了

e.ユーザトリガーの受取り

 

1-a.モーションのインスタンスの作成(.motion3.jsonファイルの読み込み)

モーションの再生にはACubsimMotionクラスから派生したCubismMotionクラスを使用します。
モーションに利用するデータは拡張子が「.motion3.json」となっているモーションファイルです。
Cubism2.1の「.mtn」は使用できません。
この.motion3.jsonファイルの読み込みにはCubismMotion::Create関数を利用します。
jsonファイルを一度ロードしてからバッファとサイズを渡してロードします。

 

 

1-b.モーションの設定

モーションには主に以下の項目を設定します。
これらの設定は行わなくても再生することができます。

* モーション開始時のフェードインの時間

ACubismMotion::SetFadeInTime関数で設定、ACubismMotion::GetFadeInTime関数で取得できます。
フェードインの時間を秒で指定します。

* モーション終了時のフェードアウトの時間

ACubismMotion::SetFadeOutTime関数で設定、ACubismMotion::GetFadeOutTime関数で取得できます。
フェードアウトの時間を秒で指定します。

* ループ再生のON/OFF

void CubismMotion::IsLoop(csmBool loop)関数で設定、csmBool CubismMotion::IsLoop()関数で現在の値を取得できます。
trueを設定すると終了時に最初から再生します。
他のモーションが割り込むか終了命令が呼ばれるまで無限にループ再生し続けます。
設定しない場合の初期値はfalse(ループしない)です。

※Frameworkのループの動作はエディターのループ動作と完全な一致を保証していません。
※現在Animatorはmotion3.jsonファイルにループ設定を反映させられないため、
 Frameworkはmotion3.jsonファイルのループ設定を無視してfalseを設定します。

設定例 (※これらの設定はモーションの再生前に行ってください)

モーションのフェード値をファイルから設定する方法については

A、.motion3.jsonファイルに全体値として設定する方法

B、.motion3.jsonファイルにパラメータ個別の値として設定する方法

C、.model3.jsonファイルに全体値として設定する方法

この3つがあり、優先順位はB、C、Aの順で適用されます。
いずれの指定もない場合はデフォルト値の1秒が設定されます。

 

 

 

2-a.モーション管理クラスのインスタンスの作成

前項で作成したCubismMotionクラスのインスタンスをモデルに適用する(アニメーションさせる)ためには、 CubismMotionManagerクラスを使用します。

 

 

2-b.モーションの再生

モーションの再生にはCubismMotionManager::StartMotionPriority関数を使用します。

モーションを複数同時に再生させたい場合は、CubismMotionManagerインスタンスを増やしてください。
これは右手と左手のモーションを別々に制御するなどのことに使えます。
モーションを同時に再生する場合は、できるだけ同じパラメータについては設定しないでください。
その場合最後に更新したモーションのパラメータが有効になります。
また、フェードが綺麗にかからない場合があります。

 

2-c.モデルのパラメータ更新

CubismMotionManager::StartMotionPriority関数でモーションを再生しただけでは、モデルはアニメーションしません。
現在再生中のモーションのパラメータをモデルに設定するためには、毎描画時にCubismMotionManager::UpdateMotion関数を呼び出します。
入力するdeltaTimeSecondsを調整することでスローや停止、早送りをすることができます。

 

 

2-d.モーションの終了

モーションは再生時間が終われば自動で終了しますが
任意のタイミングで終了したいときはCubismMotionQueueManager::StopAllMotions関数を使用します。
フェードの途中などで、同時に2つ以上のモーションを再生している 場合、それらすべてを終了します。

 

 

2-e.イベントの受取り

モーションに設定された「イベント」が再生されたときに、
CubismMotionQueueManagerにSetUserTriggerCallback関数で登録したコールバックで呼び出しを受けることができます。
登録できるコールバックは1つのみです。
インスタンスの関数を呼び出したい時にはいったんstaticな関数をインスタンスのポインタと一緒に登録し、
staticな関数から登録しておいたインスタンスのポインタを使って目的の関数を呼び出すようにしてください。
複数の動作をさせたい時には一つのコールバックから順に呼び出すようにしてください。

CubismUserModelクラスには標準でこの仕組みが組み込まれています。
(CubismUserModel::UserTriggerEventFired関数、CubismUserModel::CubismDefaultUserTriggerCallback関数)

 

モーションの自動削除

CubismMotionQueueManager::StartMotion関数の呼び出し時に第二引数のautoDeleteにtrueを入れると、
モーションが再生終了するときにモーションマネージャがメモリーにロードしたモーションデータを破棄します。
一度のみ再生されるファイルに対して使用されることを想定しています。

 

 

CubismMotionQueueManagerクラスとCubismMotionManagerクラス

モーションの管理クラスにはCubismMotionQueueManagerクラスと、
CubismMotionQueueManagerクラスを継承したCubismMotionManagerクラスがあります。

CubismMotionQueueManagerクラスはフェード処理によって、モーションの切り替えを滑らかに行う機能があります。

CubismMotionManagerクラスは再生に優先順位を設定し、優先順位の低い再生命令を無視する機能があります。

Copyright © 2018 Live2D Inc.