モーション再生時にモーションシンクを行う(Unity)
最終更新: 2024年11月28日
Cubism 5 SDK MotionSync Plugin for Unity R2より、モーション再生時に.model3.json 上で紐づけられた音声と同じく紐づけられたモーションシンク設定を利用し、モーションシンクを行えるようになりました。
前提
モーション再生時にモーションシンクを適用させるには .model3.json に書き出されるモーションの情報に、音声とモーションシンク設定が適切に設定されていることが前提となります。
具体的な設定方法はEditorマニュアル「モーションの設定」をご覧ください。
仕組み
Cubism 5 SDK MotionSync Plugin for Unity R2 以降では以下を追加しました。
CubismMotionSyncLinkData
- インポート時にモーションと音声、モーションシンク設定を紐づけるアセット
CubismMotionSyncLinkList
CubismMotionSyncLinkData
の参照を持つアセット
CubismMotionSyncLinkController
- 再生されたモーションに紐づけられた音声を再生し、モーションシンク設定を適用するコンポーネント
CubismMotionSyncLinkData
とその参照を持つリストの CubismMotionSyncLinkList
アセットはモデルのインポート及び再インポート時に生成されます。
今回追加された CubismMotionSyncLinkController
コンポーネントをモデルに適用し、CubismMotionController
コンポーネントを利用してモーションを再生することでモーションの再生を CubismMotionController.AnimationBeginHandler
で検知し、紐づけられた音声を再生することでモーションシンクを利用することが出来ます。
今回追加された CubismMotionSyncLinkController
コンポーネントをモデルに適用すると、モーションの再生を CubismMotionController.AnimationBeginHandler
で検知し、紐づけられた音声を再生することでモーションシンクを利用することが出来ます。
CubismMotionController
コンポーネントを利用してモーションを再生します。CubismMotionController
コンポーネントでのモーション再生について、詳しくは SDKマニュアル「Motion」をご覧ください。
インポート済みのモデルを利用する場合
既に設定を終えているモデルが Cubism 5 SDK MotionSync Plugin for Unity R1 以前を利用したプロジェクトにインポート済みの場合、Cubism 5 SDK MotionSync Plugin for Unity R2 以降にアップデートし、モデルの再インポートを行うことで CubismMotionSyncLinkData
と CubismMotionSyncLinkList
アセットが生成されます。
動作するシーンの作成
1. Editorマニュアル「モーションの設定」で設定を終えたモデルを用意します。
2. モデルをシーンに配置し、SDKマニュアル「シーン上での利用(Unity)」の内容のうち、音声ファイルの追加以外の設定を行います。
3. モデルのルートに CubismMotionSyncLinkController
コンポーネントをアタッチします。この時、自動で CubismMotionController
コンポーネントもアタッチされます。
4. CubismMotionSyncLinkController
コンポーネントの AudioSource に利用する AudioSource コンポーネントをリンクし、MotionSyncLinkList
には利用するモデルの CubismMotionSyncLinkList
アセットをリンクします。
5. 今回は下記のスクリプトを作成します
using UnityEngine; using Live2D.Cubism.Framework.Motion; public class MotionLinkTest : MonoBehaviour { private CubismMotionController _motionController; public AnimationClip Clip; // Start is called before the first frame update private void Start() { _motionController = GetComponent<CubismMotionController>(); } // Update is called once per frame private void Update() { if (_motionController.IsPlayingAnimation()) { return; } if (Input.GetKeyDown(KeyCode.F)) { _motionController.PlayAnimation(Clip, isLoop: false); } } }
6. 作成したスクリプトをモデルにアタッチして、音声とモーションシンクを紐づけ済みのモーションを Clip に設定します。
7. シーンを再生し、キーボードのFキーを押すとモーションが再生され、音声の再生とモーションシンクが行われます。