获取在motion3.json中设置的Event (SDK for Cocos Creator)

最終更新: 2023年3月14日

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

概述

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

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

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

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

创建一个接收Event的组件

通过按右键单击Assets窗口并单击[Create] – [TypeScript] – [New Component]来创建TypeScript脚本。
这里的名称是UserDataTest。

将创建的UserDataTest的内容改写如下。

import { _decorator, Component, Animation } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('UserDataTest')
export class UserDataTest extends Component {

  UserDataEventListener(value: String) {

    const anim = this.getComponents(Animation)[0];
    const currentState = anim.getState(anim.defaultClip!!.name)

    console.log("Time: " + currentState.current + "\n" + "Value: " + value);
  }

}

在CubismMotion3Json中追加描述

打开CubismMotion3Json类,如下描述创建toAnimationClipB()的AnimationEvent的位置。

const frame = this.userData[i].time;
const functionName = `UserDataEventListener`
const params = new Array<string>();
params.push(this.userData[i].value);
animationClip.events.push({ frame: frame, func: functionName, params: params });

对于functionName,设置接收上一节中创建的UserDataTest类的Event的方法名称。

将模型和动态置入到Scene中

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

关于载入和重新载入,请参考“载入SDK”和“更新载入的模型”。

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

将motion3.json生成的AnimationClip拖放到置入Hierarchy的Prefab中的Animation组件内的Default Clip栏。

这要就完成了设置。

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

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