
Instantiate(prefab)만 사용하면 추후에 position을 바꿔도 다시 프리팹의 포지션으로 돌아오는 현상이 내부적으로 존재함. Instantiate 동시에 매개변수로 position, rotation, parent를 모두 초기화 하는걸 권장함
49 lines
1.5 KiB
C#
49 lines
1.5 KiB
C#
using System.Threading.Tasks;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
|
|
namespace DDD
|
|
{
|
|
[CreateAssetMenu(fileName = "RestaurantDataSo", menuName = "RestaurantData/RestaurantDataSo", order = 0)]
|
|
public class RestaurantDataSo : ScriptableSingleton<RestaurantDataSo>
|
|
{
|
|
[Header("Asset References")]
|
|
[SerializeField] private AssetReference _restaurantPlayerDataSo;
|
|
[SerializeField] private AssetReference _restaurantManagementDataSo;
|
|
|
|
public RestaurantPlayerDataSo PlayerData { get; private set; }
|
|
public RestaurantManagementDataSo ManagementData { get; private set; }
|
|
|
|
private bool _isLoaded;
|
|
|
|
public async Task LoadData()
|
|
{
|
|
if (_isLoaded)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var playerHandle = _restaurantPlayerDataSo.LoadAssetAsync<RestaurantPlayerDataSo>();
|
|
var managementHandle = _restaurantManagementDataSo.LoadAssetAsync<RestaurantManagementDataSo>();
|
|
|
|
await playerHandle.Task;
|
|
await managementHandle.Task;
|
|
|
|
PlayerData = playerHandle.Result;
|
|
ManagementData = managementHandle.Result;
|
|
_isLoaded = true;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (!_isLoaded) return;
|
|
|
|
_restaurantPlayerDataSo.ReleaseAsset();
|
|
_restaurantManagementDataSo.ReleaseAsset();
|
|
|
|
_isLoaded = false;
|
|
}
|
|
}
|
|
} |