0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ゲームの状況に合わせて効果音にバリエーションを by ADX for Unity

Posted at

はじめに

音で表現力を上げる場合、同じ動作に対して複数音源でバリエーションを持たせるという方法があります。例えば、足元の素材に応じて足音が変わる、コンボが続くと少しずつ音が高くなる、などです。

しかしUnityだけで実現しようとした場合、音源が増えると管理コストや実装コストが跳ね上がってしまいます。

そこで、サウンドミドルウェア「ADX for Unity」を使います。専用ツールのAtomCraftで使用できる「セレクタ」を用いると、ひとつのサウンドデータに様々な音を内包できます。そうすることで、コストを抑えつつゲームの状況に応じて異なる効果音が再生出来るようになります。

本記事のサンプルでは、2段ジャンプできるキャラクターが、地上でジャンプしたのか、空中でジャンプしたのかによって音を分岐させています。2種類の音が鳴りますが、アセット上のファイルはひとつにまとまっていることが確認できます。

この記事は「ADX2 for UE4で音量コンフィグを実装」のUnity版です。元記事作者のSigさん ( https://qiita.com/SigRem )の許可を得て作成しています。

https://qiita.com/SigRem/items/2c1f497ebf0e981dd43c

動作確認環境

Windows 10 Home 20H2
Unity 2020.3.27f1 + ADX LE Unity SDK 3.06.03
CRI ADX LE Tools for Windows 3.46.02

前提記事

CRI ADX導入方法や基本的な操作については以下の記事を参照して下さい。

Unityのサウンド機能をADXで強化する

https://qiita.com/Takaaki_Ichijo/items/16e6501fc07f5b3b3377

やること

  • AtomCraftで複数のサウンドを持つスイッチキューを作成
  • Unityにインポート
  • テストシーンの作成
  • テストプレイ

実装

AtomCraftで複数のサウンドを持つキューを作成

まずは、再生する音データの作成を行います。ADXにおいては、再生用のデータはUnityとは別のツール「AtomCraft」を使います。その手順については、元の記事(UE4向け記事)の同名の項と同じになりますので省略しています。

本記事の手順を試す場合は、まず元の記事の該当項目を進めてから本記事を進めてください。UE4版との違いとして1点、「Atomキューシートバイナリのビルド」画面で、一番左下のオプション「UnityAssets出力」にチェックを入れるのを忘れないようにして下さい。

Unityでの実装

キューシートをインポート

AtomCraftからエクスポートしたファイルをインポートします。

テスト用シーンの作成

ジャンプするキャラクターと、ジャンプ操作のためのボタンを準備します。

テスト用シーン

  • CriWareLibraryInitializer、CriWareErrorHandler
    • 基本コンポーネント、GameObject>CRIWAREから作成
  • CRIWARE
    • 自動生成
  • Cue_Action_Jump(CriAtomSource)
    • 前項でインポートした音源
  • UIのButton
  • Plane
  • Cube
    • プレイヤー代わり
    • Rgidbodyと後述のJumpAction.csスクリプトをアタッチ

テスト用スクリプトの設定

以下の内容でJumpAction.csスクリプトを作成し、Cubeにアタッチ、設定を行います。

JumpAction.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class JumpAction : MonoBehaviour
{
    public float velocity = 5;
    public bool isGround;
    public CriAtomSource criAtomSource;

    public void Jump()
    {
        GetComponent<Rigidbody>().AddForce(new Vector3(0, velocity, 0), ForceMode.Impulse);
        CriAtomExPlayer ex = criAtomSource.player;
        if (isGround)
        {
            ex.SetSelectorLabel("Action", "Action_Ground");
        }
        else
        {
            ex.SetSelectorLabel("Action", "Action_Air");
        }
        criAtomSource.Play();
    }

    private void OnCollisionStay(Collision collision)
    {
        isGround = true;
    }

    private void OnCollisionExit(Collision collision)
    {
        isGround = false;
    }
}

Cubeの設定

  • JumpAction.csをCubeにアタッチ
  • Cue_Action_Jump(CriAtomSource)をJumpAction.csに登録

Buttonの設定

  • ButtonのOnclickにCubeのJumpAction.csのJumpメソッドを割り当てる

テストプレイ

ここまで出来たら保存して実行してみます。CubeがPlaneに接触している場合としていない場合で、音が変化することを確認します。

これで、Unity側では1つのサウンドデータ(Cue_Action_Jump(CriAtomSource))だけ用いて複数の音を鳴らすことが出来ることがわかったかと思います。

JumpAction.csの内容の補足

音を鳴らし分けるには、セレクタ(Action)とセレクタラベル(Action_Ground、Action_Air)を指定する必要がありますが、CriAtomSourceでは再生出来ません。
そのため一旦CriAtomExPlayerを取得し、SetSelectorLabelで再生処理を行っています。

応用

今回の例では、接触しているコライダーの情報を一切取得していません。足音を変化させる場合、地面にタグを付けておき、OnCollisionStayの中でそのタグを取得してSetSelectorLabelへ渡す、といった処理になるかと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?