获取在motion3.json中设置的Event

最終更新: 2017年11月21日

本节说明如何从自动生成的AnimationClip发行的Event中获取motion3.json中设置的Event信息。

概述

[UserData]是3.1开始追加的功能,用户可以在动态的任意时刻发行Event。
在Unity中,Event是从由motion3.json转变而来的AnimationClip发行的。
根据您处理Event的方式,您可以将其用于各种目的,例如从动态中间播放音频或变更部件的显示状态等。

请参考 此处 了解如何在motion3.json中设置Event。

要获取动态发行的Event,请按照以下步骤操作。

  1. 创建一个接收Event的组件
  2. 在CubismMotion3Json中追加描述
  3. 将模型和动态置入到Scene中

创建一个接收Event的组件

在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类的Event的方法名称。

将模型和动态置入到Scene中

载入或重新载入设置Event的motion3.json。

将模型Prefab置入在Hierarchy视窗中,并将UserDataTest组件附加到Prefab的根。

将motion3.json生成的AnimationClip拖放到置入Hierarchy的Prefab中。

这要就完成了设置。

如果在这种状态下执行Scene,将从正在播放的AnimationClip的特定时间发行Event,并将为Event设置的字符串输出到Console视窗。

请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。