using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; namespace DDD { [CreateAssetMenu(fileName = "GameData", menuName = "GameData/GameData")] public class GameData : ScriptSingleton { [SerializeField] private AssetReference _gameLocalizationData; [SerializeField] private AssetReference _uiData; public GameLocalizationData LocalizationData { get; private set; } public UiData UiData { get; private set; } private bool _isLoaded; public async Task LoadData() { if (_isLoaded) { return; } var gameLocalizationDataHandle = _gameLocalizationData.LoadAssetAsync(); var popupUiDataHandle = _uiData.LoadAssetAsync(); await gameLocalizationDataHandle.Task; await popupUiDataHandle.Task; LocalizationData = gameLocalizationDataHandle.Result; UiData = popupUiDataHandle.Result; Debug.Assert(LocalizationData != null, "GameLocalizationData is null"); Debug.Assert(UiData != null, "UiData is null"); _isLoaded = true; } private void OnDisable() { if (_isLoaded == false) return; _gameLocalizationData.ReleaseAsset(); _isLoaded = false; } } }