using System.Threading.Tasks; using UnityEditor; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Localization.SmartFormat.PersistentVariables; using UnityEngine.ResourceManagement.AsyncOperations; namespace DDD { [CreateAssetMenu(fileName = "GameDataSo", menuName = "GameData/GameDataSo", order = 0)] public class GameDataSo : ScriptableSingleton { [Header("Asset References")] [SerializeField] private AssetReference _gameLocalizationDataSo; public GameLocalizationDataSo GameLocalizationData { get; private set; } private bool _isLoaded; public async Task LoadData() { if (_isLoaded) { return; } var smartStringHandle = _gameLocalizationDataSo.LoadAssetAsync(); await smartStringHandle.Task; GameLocalizationData = smartStringHandle.Result; Debug.Assert(GameLocalizationData != null, "SmartStringVariableGroup is null"); _isLoaded = true; } private void OnDisable() { if (!_isLoaded) return; _gameLocalizationDataSo.ReleaseAsset(); _isLoaded = false; } } }