Cubism 製品のマニュアル・チュートリアルはこちら
 
Cubism Editorマニュアル    Cubism Editorチュートリアル    Cubism SDKマニュアル    Cubism SDKチュートリアル

表情やモーションを一瞬で最後のフレームに

LAppModelのSetExpressionやStartMotionを使うと表情やモーションを変更出来ますが、
これらはそれぞれのjsonファイルに設定された時間を掛けて変更されます。
それを指定した時間を無視して一瞬で一番最後の状態にする方法はありませんでしょうか?

具体的に何をしたいかと言うとセーブしてロードした時に最後の状態で復帰させたいのです。
ロード時に表情やモーションのデータをそのまま読み込ませると変更中の動きが見えてしまうので…。

コメント

  • @ねこねこ さん

    使用しているクラスや関数を見る限り、使用しているSDKはNativeまたはWebだと思われます。
    もしそうであれば、モーションを指定の時間から再生させるには、実際にモーションを再生しているCubismMotionManagerの利用方法を工夫することで対応可能です。

    StartMotion()を呼んだ直後に、CubismMotionManager::UpdateMotion()またはCubismMotionManager.updateMotion()の第二引数に、再生を開始させるモーションの時間を渡します。
    渡す時間は、0からモーションの総再生時間になります。
    それ以降は、指定した時間から通常通りモーションを再生させ続けたいのであれば第二引数に直前のフレームからの経過時間を、もし指定した時間の状態で止めておきたいのであれば0を渡します。
    ※参考として、モーションの総再生時間はCubismMotion::GetDuration()で取得することができます。

    ただし、モーションのモーションフェード、パラメータフェードの値が0でない場合、指定した時間から再生させたときもモーション間でクロスフェードが発生します。
    各フェードの時間は、CubismMotion::Parse()の処理をごらんいただければ分かる通り、.motion3.jsonに記述された値を利用しております。
    motion3.json自体の値を変更する、またはプログラムからそれらの値を変更することでモーション間のクロスフェードを無効化できますので、必要に応じて値を変更してください。
    モーションフェード、パラメータフェードについては以下をご覧ください。
    https://docs.live2d.com/cubism-editor-manual/fade-setting/

    モデルにポーズ(パーツの表示状態の制御)が設定されている場合も同様に、パーツの切替時にクロスフェードします。
    これを無効にするには、ポーズの設定が記述されている.pose3.jsonのFadeの時間を0に設定します。
    .pose3.jsonは、Cubism Viewerから編集できます。
    ポーズの詳細については以下をご覧ください。
    https://docs.live2d.com/cubism-editor-manual/pose-setting/
  • ご回答頂き、ありがとうございます。
    updateMotion()を使う事で目的の動作をさせる事が出来ました。
    この度は詳しくご教授下さり、ありがとうございました。
コメントするにはサインインまたは登録して下さい。