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