协同 ADX2 和 Unity 制作节拍动画

作者:CRIWARE游戏音频视频中间件
2019-11-30
5 4 0

前言

当所有组件和谐地进行协同工作时,我们所构建的虚拟效果才能达到最完美的效果。这是我们进行游戏音频创作的核心,因为声音设计师的工作是制作在游戏环境中有意义且悦耳的声音。 我们可以通过音频引擎和游戏编辑引擎来完成项艰苦的工作。

本次,我们将探讨利用 ADX2的 BeatSync 功能来控制 2D 骨骼动画。

使用 Atom Craft

首先,我们可以将一些音乐加载到 Atom Craft 中,并将生成的素材拖到我们的 CueSheet 上,以创建新的和弦提示。 为了进行测试,我们可以创建两个单独的提示,一个为 120 bpm,另一个为 160 bpm。 最后,我们可以右键单击→新建对象→为每个提示创建 BeatSync 参数,然后在检查器中设置其 BPM 以匹配各个音乐提示的速度。

我们可以在 Inspector 中进一步调整拍号,并设置自己的自定义节拍模式(如果需要的话)。

现在,我们已经可以 Build 该项目,并将其加载到 Unity 中。

使用 Unity

在 Unity 中执行 ADX2 的初始设置并加载 ACB + ACF 数据后,我们只需要做两件事即可使该系统正常工作:一些可以播放的带有 BeatSync 标记的音乐,以及一个可以接受接收 BeatSync 数据的游戏对象 。 动画与节奏联系在一起一定是一件有趣的事情,所以我们接下来展示如何控制 2D 骨骼动画的效果。

编辑 Animation

我们只需要两个状态来演示动画效果,即“Player_Idle”状态和“Player_Dancing”状态。 可以将“Idle”状态设置为动画的一帧,而“Dancing”状态可以设为 2 帧以传达运动。 然后将这些状态挂钩到 Animator 中,在播放至“Ducking Dance”状态后,会将播放器重置为“Idle”状态。

设置脚本

现在,我们可以将新脚本加载到我们的动画播放器上,并设置一些代码以在节拍上运行。 所需的代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BeatSyncAnimation : MonoBehaviour
{
    private Animator animator;
    private SpriteRenderer sprite;
    private float bpm;

    void Start()
    {
        animator = gameObject.GetComponent();
        sprite = gameObject.GetComponent();

        CriAtomExBeatSync.SetCallback(BeatSyncCallback);
    }

    void BeatSyncCallback(ref CriAtomExBeatSync.Info info)
    {
        animator.Play("Player_Dancing");

        if (bpm != info.bpm)
        {
            Debug.Log("bpm is now :" + info.bpm);
            bpm = info.bpm;
        }
    }
}

ADX2 毫不费力地协同了大多数正在发生的事情。首先,我们有一个回调函数,该函数引用了 ADX2 的 CriAtomExBeatSync(每个节拍)中的信息。然后,它指示动画制作者播放“Player_Dancing”动画。除此之外,我们还有一个小的 if 语句,如果更改了当前的 BPM,它将记录当前的 BPM(用于后续的播放)。这只是一个示例,说明了我们如何使用 BeatSync 检索其他信息,例如拍数或拍号,这些信息也可用在进一步控制游戏的其他方面上。

需要指出的是,控制 Cue 的播放与停止的代码仅调用 CriAtomSource.Play()CriAtomSource.Stop() 函数。没有其它追踪代码用来检查 BeatSync 的状态(所有这些都由引擎内部控制)。一旦包含 BeatSync 的 Cue 停止,就不再调用该回调函数,而因为没有节拍调用此函数,因此动画也就跟随其自动停止。

小结

音乐在游戏中无处不在,无论是作为构建游戏世界的基础内容还是作为游戏循环中的核心元素。 使用上面简述的功能技术可以帮助您充分利用音乐,从而为用户带来更好的游戏体验。 还好,使用 ADX2 可以使交互式的音频制作变的更加快捷方便!

样本工程

1910_BeatSyncDownload

注:该项目使用 CRIWARE SDK for Unity V2.99.00,Unity V2019.1.6f1