using System.Collections.Generic; using UnityEditor; using UnityEditor.AddressableAssets.Settings; using UnityEditor.Localization.Addressables; using UnityEngine; using UnityEngine.Localization; /// /// Places all English assets into a local group and all other languages into a remote group which could be downloaded after the game is released. /// [System.Serializable] public class GroupResolverExample : GroupResolver { public string localAssetsGroup = "Localization-Local"; public string remoteAssetsGroup = "Localization-Remote"; [MenuItem("Localization Samples/Create Group Resolver")] static void CreateAsset() { var path = EditorUtility.SaveFilePanelInProject("Create Addressable Rules", "Localization Addressable Group Rules.asset", "asset", ""); if (string.IsNullOrEmpty(path)) return; var instance = ScriptableObject.CreateInstance(); var resolver = new GroupResolverExample(); // Apply our custom group resolver to everything instance.LocaleResolver = resolver; instance.AssetTablesResolver = resolver; instance.AssetResolver = resolver; instance.StringTablesResolver = resolver; // Make this our new AddressableGroupRules AssetDatabase.CreateAsset(instance, path); AddressableGroupRules.Instance = instance; } public override string GetExpectedGroupName(IList locales, Object asset, AddressableAssetSettings aaSettings) { // Use default behaviour for shared assets if (locales == null || locales.Count == 0) return base.GetExpectedGroupName(locales, asset, aaSettings); var locale = locales[0]; if (locale.Code == "en") return localAssetsGroup; return remoteAssetsGroup; } }