using System; using System.Collections.Generic; using System.IO; using AK.Wwise; using Wwise.Wooduan.Components; using Wwise.Wooduan.Editor; using UnityEditor; using UnityEngine; using Wwise.Wooduan.Tools; namespace Wwise.Wooduan.Tools { public class PrefabComponentsSynchronizer : EditorWindow { private string _prefabFolder = ""; private GameObject _samplePrefab; private string _sampleCharacterName = ""; private bool _saveToXml = true; public void OnGUI() { AkWooduanGuiDrawer.DisplaySearchPath(ref _prefabFolder); _samplePrefab = (GameObject) EditorGUILayout.ObjectField("Sample Prefab", _samplePrefab, typeof(GameObject), false); _sampleCharacterName = EditorGUILayout.TextField("Character Name", _sampleCharacterName); _saveToXml = EditorGUILayout.Toggle("Save to Xml", _saveToXml); if (GUILayout.Button("Run")) Run(); } private void Run() { if (!_samplePrefab) { EditorUtility.DisplayDialog("Error", "Please select a sample prefab!", "OK"); return; } var sampleAkBank = _samplePrefab.GetComponent(); if (!sampleAkBank) { EditorUtility.DisplayDialog("Error", "Please use a prefab with LoadBank or EffectSound!", "OK"); return; } var prefabNamePrefix = _samplePrefab.name.Substring(0, _samplePrefab.name.IndexOf(_sampleCharacterName, StringComparison.Ordinal)); var prefabNameSuffix = _samplePrefab.name.Substring( _samplePrefab.name.IndexOf(_sampleCharacterName, StringComparison.Ordinal) + _sampleCharacterName.Length); var prefabPaths = Directory.GetFiles(_prefabFolder, "*.prefab", SearchOption.AllDirectories); foreach (var prefabPath in prefabPaths) { var prefabName = Path.GetFileNameWithoutExtension(prefabPath); if (prefabName == _samplePrefab.name) continue; var prefabCharacterName = prefabName.Replace(prefabNamePrefix, "").Replace(prefabNameSuffix, ""); if (!prefabName.StartsWith(prefabNamePrefix) || !prefabName.EndsWith(prefabNameSuffix)) continue; var prefabPathShort = AkWooduanScriptingTools.ShortPath(prefabPath); var prefab = AssetDatabase.LoadAssetAtPath(prefabPathShort); if (!prefab) continue; if (sampleAkBank && sampleAkBank.data != null) { var sampleBank = sampleAkBank.data; var prefabLoadBank = AkWooduanHelper.GetOrAddComponent(prefab); var bankName = sampleAkBank.data.Name.Replace(_sampleCharacterName, prefabCharacterName); var bank = AkWwiseProjectInfo.GetData().FindWwiseObject(bankName); if (bank != null) { var newBank = new Bank(); newBank.SetupReference(bank.Name, bank.Guid); prefabLoadBank.data = newBank; } if (_saveToXml) AkWooduanComponentBackup.Instance.UpdateXmlFromComponent(prefabPathShort, prefabLoadBank); } AkWooduanComponentBackup.SaveComponentAsset(prefab, prefabPathShort); } } } }