大福未来研究所

大福フューチャーラボのなんか色々なアレ。プログラミング(C++/DirectX/Unity/UE4あたりやりたい)とか音楽とかの。

【Unityエディタ拡張】効果音のリストをエディタ拡張でわかりやすくしてみた

夏休みなのでやっと色々記事が書けそうです。

 

効果音のリストはなんか見づらいことが多い

よくオブジェクトにひっつける効果音のリストがAudioClipの配列になってたりすると、どこにどの音を入れとくんだっけ…みたいな感じになりませんか?

というわけで、エディタ拡張で作ってみることにしました。

今回は

Pop

Attack

Damage

Dead

の四種類の効果音を設定できるようになっていますが、AudioList.cs内のAudioName内を書き換えれば自由に変更できます。


f:id:dfk_ohnuma:20160801043141p:plain 

こんな感じで、設定したい効果音の種類を選んで編集できます。

f:id:dfk_ohnuma:20160801043142p:plain

暫定的にこんな処理も入れてあります。
 

//__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/
//
// ▼ File       AudioList.cs
//
// ▼ Brief      オブジェクトで使用するAudioClipリストを自動的にAudioManagerに送る
//
//
//__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/
using UnityEngine;
using System.Collections;


public class AudioList : MonoBehaviour {

    /// <summary>
    /// AudioClipのenum
    /// </summary>
    public enum AudioName
    {
        Pop,
        Attack,
        Damage,
        Dead,
        End_of_Enum
    }

    /// <summary>
    /// エディタ拡張用
    /// </summary>
    public AudioName audioName;

    public AudioClip[] _SoundEffectList = new AudioClip[(int)AudioName.End_of_Enum];



}


で、これのエディタを下記のように拡張してみます。

//__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/
//
// ▼ File       AudioListEditor.cs
//
// ▼ Brief      AudioList用エディタ拡張
//
//
//__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/__/
using UnityEngine;
using System.Collections;
using UnityEditor;


[CustomEditor(typeof(AudioList))]
public class AudioListEditior : Editor
{

    public override void OnInspectorGUI()
    {
        AudioList obj = target as AudioList;


        //入力された効果音の種類を設定する
        obj.audioName = (AudioList.AudioName)EditorGUILayout.EnumPopup("設定する効果音の種類", obj.audioName);

        //EOEの場合
        if (obj.audioName == AudioList.AudioName.End_of_Enum)
        {
            EditorGUILayout.HelpBox("非設定項目です。", MessageType.Info, true);
        } else
        {

            obj._SoundEffectList[(int)obj.audioName] = EditorGUILayout.ObjectField(obj.audioName.ToString(), obj._SoundEffectList[(int)obj.audioName], typeof(AudioClip), true) as AudioClip;
            
        }

    }
}