protected T EditorLoad <T>(string address) where T : UnityEngine.Object { if (address == null || address == "") { return(null); } #if UNITY_EDITOR string subAddress = null; if (address.Contains("[")) { subAddress = address.Split('[', ']')[1]; address = address.Split('[', ']')[0]; } UnityEditor.AddressableAssets.Settings.AddressableAssetSettings settings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.Settings; List <UnityEditor.AddressableAssets.Settings.AddressableAssetEntry> allEntries = new List <UnityEditor.AddressableAssets.Settings.AddressableAssetEntry>(settings.groups.SelectMany(g => g.entries)); UnityEditor.AddressableAssets.Settings.AddressableAssetEntry foundEntry = allEntries.FirstOrDefault(e => e.address == address); if (foundEntry != null) { if (subAddress != null) { UnityEngine.Object[] objects = UnityEditor.AssetDatabase.LoadAllAssetRepresentationsAtPath(foundEntry.AssetPath); //loads all sub-assets from one asset if (objects.Length > 0) { for (int i = 0; i < objects.Length; i++) // loop on all sub-assets loaded { if (objects[i].name == subAddress && objects[i].GetType() == typeof(T)) // if the name AND the type match we found it { return((objects[i]) as T); } } } } else { return(UnityEditor.AssetDatabase.LoadAssetAtPath <T>(foundEntry.AssetPath)); } } return(null); #else Debug.LogError("Can't load addressable asset with editor load option!"); return(null); #endif }
public void LoadLanguage(UnityEngine.MonoBehaviour caller, string language) { #if UNITY_EDITOR if (UnityEngine.Application.isEditor && !UnityEngine.Application.isPlaying) { IsLoading = true; try { var aaSettings = UnityEditor.AddressableAssets.AddressableAssetSettingsDefaultObject.GetSettings(true); UnityEditor.AddressableAssets.Settings.AddressableAssetEntry foundEntry = null; var assetsList = new System.Collections.Generic.List <UnityEditor.AddressableAssets.Settings.AddressableAssetEntry>(2048); aaSettings.GetAllAssets(assetsList, false); foreach (var entry in assetsList) { if (entry.address == LanguageManagerLoaderAddress) { foundEntry = entry; break; } } Loader = UnityEditor.AssetDatabase.LoadAssetAtPath <LanguageLoader>(UnityEditor.AssetDatabase.GUIDToAssetPath(foundEntry.guid)); var languageAssetReference = Loader.FindAssetReferenceForLanguage(language); var path = UnityEditor.AssetDatabase.GUIDToAssetPath(languageAssetReference.RuntimeKey.ToString()); var type = UnityEditor.AssetDatabase.GetMainAssetTypeAtPath(path); var loadedLanguageData = UnityEditor.AssetDatabase.LoadAssetAtPath <LanguageData>(path); loadedData = loadedLanguageData.GetData(); HasLoadedLanguage = true; LoadedLanguage = language; } catch (System.Exception e) { IsLoading = false; throw e; } } #endif if (UnityEngine.Application.isPlaying) { caller.StartCoroutine(LoadLanguageCoroutine(language)); } }