★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。

新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。
Live2D公式クリエイターズフォーラム

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。

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

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()を使う事で目的の動作をさせる事が出来ました。
    この度は詳しくご教授下さり、ありがとうございました。
コメントするにはサインインまたは登録して下さい。