using System.Collections.Generic; using System.IO; using System.Reflection; using log4net; using UnityEditor; using UnityEngine; public class AudioLibrary : MonoBehaviour { private static ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public List audios; public string audioAssetsBundleName = "audio"; public string manageableAudioFolder = "Assets/Prefabs/Audio"; public void Awake() { LoadAvailableSounds(); } /// /// Loads all ManageableAudioPrefabs from an asset bundle if built or /// from the assets folder when in editor. /// TODO: DO NOT FORGET TO manually BUILD ASSET BUNDLES WHEN BUILDING /// private void LoadAvailableSounds() { #if UNITY_EDITOR string[] files = Directory.GetFiles(manageableAudioFolder, "*.prefab", SearchOption.TopDirectoryOnly); List gos = new List(); foreach (var file in files) { gos.Add(AssetDatabase.LoadAssetAtPath(file)); } foreach (GameObject go in gos) { if (go.TryGetComponent(out _)) { audios.Add(go); } else { Log.Warn("Audio library can only load prefabs with ManageableAudio components!"); } } #else var audioAssetBundle = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, audioAssetsBundleName)); if (audioAssetBundle == null) { Log.Error("Failed to load arenas asset bundle!"); return; } List gos = new List(); gos.AddRange(audioAssetBundle.LoadAllAssets()); foreach (GameObject go in gos) { if (go.TryGetComponent(out _)) { audios.Add(go); } else { Log.Warn("Audio library can only load prefabs with ManageableAudio components!"); } } #endif } }