public static WwiseAddressableSoundBank GetAddressableBankAsset(string name) { var assetPath = System.IO.Path.Combine(AkAssetUtilities.GetSoundbanksPath(), name + ".asset"); var asset = AssetDatabase.LoadAssetAtPath <WwiseAddressableSoundBank>(assetPath); if (asset == null) { Debug.LogError($"Could not find addressable bank asset : {assetPath}"); } return(asset); }
internal static void AddStreamedAssetsToBanks(HashSet <string> streamingAssetsAdded) { try { var updatedBanks = new List <string>(); foreach (var assetPath in streamingAssetsAdded) { string name = Path.GetFileNameWithoutExtension(assetPath); string platform; string language; AkAddressablesEditorUtilities.ParseAssetPath(assetPath, out platform, out language); var soundbankInfos = AkAddressablesEditorUtilities.ParsePlatformSoundbanksXML(platform, name); var bankNames = soundbankInfos.eventToSoundBankMap[name]; foreach (var bankName in bankNames) { string bankAssetDir = Path.GetDirectoryName(assetPath); string addressableBankAssetDir = AkAssetUtilities.GetSoundbanksPath(); string addressableBankAssetPath = System.IO.Path.Combine(addressableBankAssetDir, bankName + ".asset"); var bankAsset = AssetDatabase.LoadAssetAtPath <WwiseAddressableSoundBank>(addressableBankAssetPath); if (bankAsset == null) { continue; } if (!string.IsNullOrEmpty(platform)) { List <string> MediaIds = soundbankInfos[bankName][language].streamedFiles.Select(streamedFile => streamedFile.id).ToList(); bankAsset.UpdateLocalizationLanguages(platform, soundbankInfos[bankName].Keys.ToList()); bankAsset.SetStreamingMedia(platform, language, bankAssetDir, MediaIds); EditorUtility.SetDirty(bankAsset); } } } } finally { AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } }
//Create the necessary subfolders and the metadata asset public static void CreateMetadataAsset(string assetPath, HashSet <string> assetLabels, string groupName) { string soundbankPath = assetPath.Replace(AkAssetUtilities.GetSoundbanksPath(), ""); var splitBankPath = soundbankPath.Split('/'); AddressableMetadata metaDataAsset = ScriptableObject.CreateInstance <AddressableMetadata>(); metaDataAsset.labels = new List <string>(assetLabels); metaDataAsset.groupName = groupName; var rootPath = AkAddressablesEditorSettings.Instance.MetadataPath; if (!Directory.Exists(Path.Combine(Application.dataPath, rootPath))) { UnityEditor.AssetDatabase.CreateFolder("Assets", rootPath); } for (int i = 1; i < splitBankPath.Length - 1; i++) { if (!Directory.Exists(Path.Combine(Application.dataPath, Path.Combine(rootPath, splitBankPath[i])))) { AssetDatabase.CreateFolder(Path.Combine("Assets", rootPath), splitBankPath[i]); } rootPath = Path.Combine(rootPath, splitBankPath[i]); } string assetMetadataPath = Path.Combine("Assets", rootPath, Path.GetFileNameWithoutExtension(assetPath) + ".asset"); AddressableMetadata oldAsset = AssetDatabase.LoadAssetAtPath <AddressableMetadata>(assetMetadataPath); if (oldAsset) { if (!metaDataAsset.IsDifferent(oldAsset)) { return; } } UnityEditor.AssetDatabase.CreateAsset(metaDataAsset, assetMetadataPath); }
internal static void AddBankReferenceToAddressableBankAsset(ConcurrentDictionary <string, WwiseAddressableSoundBank> addressableAssetCache, HashSet <string> bankAssetsAdded) { List <CreateAssetEntry> itemsToCreate = new List <CreateAssetEntry>(); try { foreach (var bankPath in bankAssetsAdded) { string name = Path.GetFileNameWithoutExtension(bankPath); string platform; string language; AkAssetUtilities.ParseAssetPath(bankPath, out platform, out language); // First find or create AddressableBank asset WwiseAddressableSoundBank addressableBankAsset = null; if (!addressableAssetCache.TryGetValue(name, out addressableBankAsset)) { var results = AssetDatabase.FindAssets(string.Format("{0} t:{1}", name, nameof(WwiseAddressableSoundBank))); if (results.Length > 0) { string addressableBankGuid = results.First(); addressableBankAsset = AssetDatabase.LoadAssetAtPath <WwiseAddressableSoundBank>(AssetDatabase.GUIDToAssetPath(addressableBankGuid)); } string addressableBankAssetDirectory = AkAssetUtilities.GetSoundbanksPath(); string addressableBankAssetPath = string.Format("{0}/{1}", addressableBankAssetDirectory, Path.ChangeExtension(name, ".asset")); if (addressableBankAsset == null) { if (!AssetDatabase.IsValidFolder(addressableBankAssetDirectory)) { StringBuilder currentPathBuilder = new StringBuilder(); var addressableBankAssetParts = addressableBankAssetDirectory.Split('/'); currentPathBuilder.Append(addressableBankAssetParts[0]); for (int i = 1; i < addressableBankAssetParts.Length; ++i) { string previousPath = currentPathBuilder.ToString(); currentPathBuilder.AppendFormat("/{0}", addressableBankAssetParts[i]); string currentPath = currentPathBuilder.ToString(); if (!AssetDatabase.IsValidFolder(currentPath)) { AssetDatabase.CreateFolder(previousPath, addressableBankAssetParts[i]); } } } addressableBankAsset = ScriptableObject.CreateInstance <WwiseAddressableSoundBank>(); itemsToCreate.Add(new CreateAssetEntry { Asset = addressableBankAsset, Path = addressableBankAssetPath, Name = name }); } else { UpdateAddressableBankReference(addressableBankAsset, name); } addressableAssetCache.AddOrUpdate(name, addressableBankAsset, (key, oldValue) => addressableBankAsset); if (name == "Init") { var wwiseGlobablGameObject = GameObject.Find("WwiseGlobal"); InitBankHolder bankHolder; if (wwiseGlobablGameObject != null) { bankHolder = wwiseGlobablGameObject.GetComponent <InitBankHolder>(); if (bankHolder == null) { wwiseGlobablGameObject.AddComponent <InitBankHolder>(); bankHolder = wwiseGlobablGameObject.GetComponent <InitBankHolder>(); } bankHolder.InitBank = addressableBankAsset; } else { bankHolder = UnityEngine.Object.FindObjectOfType <InitBankHolder>(); if (bankHolder != null) { bankHolder.InitBank = addressableBankAsset; } else { Debug.Log("Could not find or create the InitBankHolder, you will have to add one to the WwiseGlobal object in your scene and ensure it references the Init bank."); } } } } if (!string.IsNullOrEmpty(platform)) { var soundbankInfos = AkAssetUtilities.ParsePlatformSoundbanksXML(platform, name); addressableBankAsset.UpdateLocalizationLanguages(platform, soundbankInfos[name].Keys.ToList()); addressableBankAsset.AddOrUpdate(platform, language, new AssetReferenceWwiseBankData(AssetDatabase.AssetPathToGUID(bankPath))); EditorUtility.SetDirty(addressableBankAsset); } } } finally { if (itemsToCreate.Count > 0) { AssetDatabase.StartAssetEditing(); foreach (var entry in itemsToCreate) { AssetDatabase.CreateAsset(entry.Asset, entry.Path); UpdateAddressableBankReference(entry.Asset, entry.Name); } AssetDatabase.StopAssetEditing(); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } }
public static AssetReferenceWwiseAddressableBank GetAddressableBankAssetReference(string name) { var assetPath = System.IO.Path.Combine(AkAssetUtilities.GetSoundbanksPath(), name + ".asset"); return(new AssetReferenceWwiseAddressableBank(AssetDatabase.AssetPathToGUID(assetPath))); }