motion3.jsonに設定されたイベントを取得
最終更新: 2017年11月21日
ここでは、motion3.jsonに設定されたイベントの情報を、自動生成されるAnimationClipから発行されるイベントから取得する方法を説明します。
概要
[UserData]は、3.1から追加された機能で、ユーザがモーションの任意のタイミングでイベントを発行することができます。
Unityでは、motion3.jsonから変換されるAnimationClipからイベントが発行されます。
イベントの扱い方によっては、モーションの途中から音声を再生させたり、パーツの表示状態を変更するなど、様々なことに活用できます。
motion3.jsonへのイベントの設定方法については こちら をご覧下さい。
モーションから発行されるイベントの取得には、以下の手順を行ないます。
- イベントを受け取るコンポーネントの作成
- CubismMotion3Jsonに記述を追加
- モデルとモーションを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ウィンドウに、イベントに設定された文字列が出力されます。