秒でオーディオを実装する

とりあえず一日~二日で作ったプロトタイプに音を付けたい時に使うスクリプト

//--------------------------------------------------------------------------------
//	- AudioManager -
//--------------------------------------------------------------------------------
//
//	オーディオ全般
//
//--------------------------------------------------------------------------------

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

public enum ESeID
{
	None,

	Decide,
	Cancel,
	Select,
	Bomb,
	Dash,
	
	Max
}

//--------------------------------------------------------------------------------
public class AudioManager : MonoBehaviour
{
	AudioSource	mBGM = null;
	AudioSource [] mSEList = new AudioSource[cSEMax];

	const int cSEMax = (int)ESeID.Max;

	//----------------------------------------------------------------------------
	void Awake ()
	{
		DontDestroyOnLoad( gameObject );
		var t = transform;

		mBGM = GetComponentSafe<AudioSource>( t, "BGM" );
		for( ESeID e = ESeID.None+1; e < ESeID.Max; e++ )
		{
			mSEList[(int)e] = GetComponentSafe<AudioSource>( t, e.ToString() );
		}
	}
	
	//----------------------------------------------------------------------------
	public void playSE ( ESeID id )
	{
		if ( mSEList[(int)id] != null ) mSEList[(int)id].Play();
	}
	
	//----------------------------------------------------------------------------
	public void startBGM()
	{
		if ( !mBGM.isPlaying ) mBGM.Play();
	}

	//----------------------------------------------------------------------------
	// コンポーネントの取得
	private Type GetComponentSafe<Type>( Transform parent, string gameobject_name )
	where Type : Component
	{
		Transform temp = parent.Find( gameobject_name );
		if ( !temp ) return null;
		return temp.GetComponent< Type >();
	}
}

使い方:

f:id:eiki_okuma:20190321000711j:plain

  1.  "Audio"と名前の付けた空のゲームオブジェクト*1に、"BGM"と名前の付けたゲームオブジェクトと、 ESeID の中で指定した SE の名前のゲームオブジェクトをぶら下げる("Decide"とか"Dash"とか)。BGM と SE にはそれぞれ AudioSource を追加しておく。
  2. "Audio" にこの AudioManager を追加する。
  3. 後は適当なところから playSE や startBGM を呼ぶ。

*1:この名前は別になんでもいい