Unity 편집기 확장에서 사운드 재생

9692 단어 유닛 확장UnityC#

거치다


Unity의 편집기 확장에서 사운드 용기 등을 만들 때 저장된 AudioClip의 내용을 재생하고 싶습니다. (Inspector를 해당하는 AudioClip 위치로 이동하고 싶지 않습니다.) 그래서 여기서 공유합니다.
참고로 변형으로 사운드 파일을 선택하면 사운드 → 참조 여기

스크립트


AudioClip의 재생성 참조여기 제작
정지 방법을 찾지 못했기 때문이다계속 찾고 있어요.
using System;
using UnityEngine;


#if UNITY_EDITOR
using System.Reflection;
using UnityEditor;
#endif


namespace Sample
{
    // SE,BGMの管理用コンテナクラス.
    [System.Serializable]
    public class SampleContainer : ScriptableObject
    {

        // 保持するデータ.
        [SerializeField] AudioClip soundData;


#if UNITY_EDITOR
        // SampleContainerのインスペクタ拡張.
        [CustomEditor(typeof(SampleContainer))]
        class SampleContainerEditor : UnityEditor.Editor
        {

            // インスペクタ描画.
            public override void OnInspectorGUI()
            {
                var data = target as SampleContainer;

                data.soundData = (AudioClip)EditorGUILayout.ObjectField("AudioClip", data.soundData, typeof(AudioClip));

                if (GUILayout.Button("PlayClip"))
                    this.PlayClip(data.soundData);

                if (GUILayout.Button("StopClip"))
                    this.StopClip(data.soundData);
            }


            // エディタ上でのサウンド再生.
            void PlayClip( 
                AudioClip clip)
            {
                if (clip == null) return;

                var unityEditorAssembly = typeof(AudioImporter).Assembly;
                var audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
                var method = audioUtilClass.GetMethod
                (
                    "PlayClip",
                    BindingFlags.Static | BindingFlags.Public,
                    null,
                    new Type[] {typeof(AudioClip)},
                    null
                );

                method.Invoke(null, new object[] {clip});
            }


            // エディタ上でのサウンドを停止する.
            void StopClip(
                AudioClip clip)
            {
                if (clip == null) return;

                var unityEditorAssembly = typeof(AudioImporter).Assembly;
                var audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil");
                var method = audioUtilClass.GetMethod(
                    "StopClip",
                    BindingFlags.Static | BindingFlags.Public,
                    null,
                    new Type[] {typeof(AudioClip)},
                    null
                );

                method.Invoke(null, new object[] {clip});
            }

        }
#endif
    }
}

실행 화면


이런 느낌.

ScriptableObject를 실례화하고 AudioClip을 설정하고 "Play"단추를 누르고 재생성 "Stop"을 누르면 중지합니다

좋은 웹페이지 즐겨찾기