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