motion3.jsonに設定されたイベントを取得

最終更新: 2017年11月21日

ここでは、motion3.jsonに設定されたイベントの情報を、自動生成されるAnimationClipから発行されるイベントから取得する方法を説明します。

概要

[UserData]は、3.1から追加された機能で、ユーザがモーションの任意のタイミングでイベントを発行することができます。
Unityでは、motion3.jsonから変換されるAnimationClipからイベントが発行されます。
イベントの扱い方によっては、モーションの途中から音声を再生させたり、パーツの表示状態を変更するなど、様々なことに活用できます。

motion3.jsonへのイベントの設定方法については こちら をご覧下さい。

モーションから発行されるイベントの取得には、以下の手順を行ないます。

  1. イベントを受け取るコンポーネントの作成
  2. CubismMotion3Jsonに記述を追加
  3. モデルとモーションをSceneに配置

イベントを受け取るコンポーネントの作成

Projectウィンドウの[Create]をクリックし、[C# Script]をクリックしてC#スクリプトを作成します。
ここでは名前はUserDataTestとします。

作成したUserDataTestの中身を以下のように書き換えます。

using UnityEngine;

public class UserDataTest : MonoBehaviour
{
	public void UserDataEventListener(string value)
	{
        var currentState = GetComponent<Animator>().GetCurrentAnimatorStateInfo(0);


        Debug.Log("Time : " + (currentState.length / currentState.speed) + "\n" +
            "Value : " + value);
	}
}

CubismMotion3Jsonに記述を追加

CubismMotion3Jsonクラスを開き、 ToAnimationClip() のAnimationEventを作成している箇所を以下のように記述します。

                    var animationEvent = new AnimationEvent
                    {
                        time = UserData[i].Time,
                        functionName = "UserDataEventListener",    // 追加した行
                        stringParameter = UserData[i].Value,
                    };

functionName には、前項で作成したUserDataTestクラスのイベントを受信するメソッドの名前を設定します。

モデルとモーションをSceneに配置

イベントが設定されたmotion3.jsonをインポート、または再インポートします。

HierarchyウィンドウにモデルのPrefabを配置し、PrefabのルートにUserDataTestコンポーネントをアタッチします。

motion3.jsonから生成されたAnimationClipを、Hierarchyに配置したPrefabへドラッグ・アンド・ドロップします。

以上で設定は終了です。

この状態でSceneを実行すると、再生中のAnimationClipから特定のタイミングでイベントが発行され、Consoleウィンドウに、イベントに設定された文字列が出力されます。

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