モーション再生時にモーションシンクを行う(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 以降にアップデートし、モデルの再インポートを行うことで CubismMotionSyncLinkDataCubismMotionSyncLinkList アセットが生成されます。

動作するシーンの作成

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キーを押すとモーションが再生され、音声の再生とモーションシンクが行われます。

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。