GameSynth使ってUnityに音を生む
GameSynthとはプロが使うプロシージャルオーディオミドルウェアである。
高い!と思われるかもしれない。実際高い。しかし、このソフトがあればもうSEには一生困らない...百目鬼氏もびっくりのSEを用意できちゃうって寸法ヨ!(学生なら半額19500円!安い!)
こんなん、みたら買いたくなっちゃうやろ...
というわけで本題。Unityとの連携が出来ることを謳っていたので早速使ってみる。課題は「プレイヤーが歩く音」
①プレイヤーが歩くアニメーションを用意
②SEを用意
こんな感じの画面で好きな環境を作る。ここですごいのが、バリエーションを持たせて自動生成できるってこと。靴音を今回は15種類作ってみた。
③Unityへエクスポート
パス指定でAssetsのResources、SEとか名前つけたディレクトリを指定する。
C#スクリプトもチェック入れておく。同様にパス指定。
こんな感じでインポートできる。そしたらOK。
④アニメーションするオブジェクトに③で生成したScriptをアタッチ
⑤Animationの音を鳴らしたいコマにイベント設置
この時点で音が鳴ってわーい!ってなるのだが、折角なのでMixerと連携までやる。
⑥Mixerを用意.③で作ったScriptを開く
// Script generated by the audio exporter from Tsugi
// www.tsugi-studio.com
using UnityEngine;
using UnityEngine.Audio;
using System.Collections;
public class ImpactFoot : MonoBehaviour
{
public enum PlayingMode
{
Sequential,
Shuffle,
FullRandom,
}
public PlayingMode playingMode = PlayingMode.Shuffle;
[Range(0,1)]
public float minVolume = 0.0f;
[Range(0,1)]
public float maxVolume = 1.0f;
[Range(0,2)]
public float maxPitchVariation = 1.0f;
private AudioClip[] audioClips = null;
private int lastIndex = -1;
void Start ()
{
audioClips = new AudioClip[15];
audioClips[0] = Resources.Load<AudioClip>("SE/Footsteps_000");
audioClips[1] = Resources.Load<AudioClip>("SE/Footsteps_001");
audioClips[2] = Resources.Load<AudioClip>("SE/Footsteps_002");
audioClips[3] = Resources.Load<AudioClip>("SE/Footsteps_003");
audioClips[4] = Resources.Load<AudioClip>("SE/Footsteps_004");
audioClips[5] = Resources.Load<AudioClip>("SE/Footsteps_005");
audioClips[6] = Resources.Load<AudioClip>("SE/Footsteps_006");
audioClips[7] = Resources.Load<AudioClip>("SE/Footsteps_007");
audioClips[8] = Resources.Load<AudioClip>("SE/Footsteps_008");
audioClips[9] = Resources.Load<AudioClip>("SE/Footsteps_009");
audioClips[10] = Resources.Load<AudioClip>("SE/Footsteps_010");
audioClips[11] = Resources.Load<AudioClip>("SE/Footsteps_011");
audioClips[12] = Resources.Load<AudioClip>("SE/Footsteps_012");
audioClips[13] = Resources.Load<AudioClip>("SE/Footsteps_013");
audioClips[14] = Resources.Load<AudioClip>("SE/Footsteps_014");
}
public void PlaySFX()
{
switch (playingMode)
{
case PlayingMode.Sequential:
lastIndex++;
if (lastIndex == audioClips.Length)
lastIndex = 0;
break;
case PlayingMode.Shuffle:
int newIndex = lastIndex;
while (lastIndex == (newIndex = Random.Range(0, audioClips.Length))) { }
lastIndex = newIndex;
break;
case PlayingMode.FullRandom:
lastIndex = Random.Range(0, audioClips.Length);
break;
}
AudioSource audioSource = (AudioSource)gameObject.AddComponent<AudioSource>();
audioSource.pitch = (float)Mathf.Pow(2.0f, maxPitchVariation * (2.0f * Random.value - 1.0f));
audioSource.volume = minVolume + (maxVolume - minVolume) * Random.value;
audioSource.loop = false;
audioSource.spatialBlend = 1.0f;
audioSource.clip = audioClips[lastIndex];
#修正箇所 はじまり
#UnityEngine.AudioをUsingにすること
AudioMixer mixer= Resources.Load("MasterMixer")as AudioMixer;#ここではMasterMixerという名前なので
audioSource.outputAudioMixerGroup = mixer.FindMatchingGroups("SE")[0];#ここではSEというMixerなので
#修正箇所 終わり
audioSource.Play();
if(audioSource.loop == false)
Destroy(audioSource, audioClips[lastIndex].length);
}
void StopLoops()
{
AudioSource[] audioSources = gameObject.GetComponents<AudioSource>();
foreach(AudioSource source in audioSources)
Destroy(source);
}
}
修正は2行程度だ。毎回修正が必要だが、このランダム生成と自動シャッフルの利便性の比ではない。これくらいやろう。
完成!ピッチや音量が変わるのよいですね。
今回はここまで。ちなみにtsugi社は安くて使いやすい効果音作成パックもご用意してくださってるので、何事もなくこれで足りると思う。しかし、それでもGameSynthのすごいところたくさんあるので今後もいろいろ触っていこうと思うよ!
この記事が気に入ったらサポートをしてみませんか?