작성
·
277
·
수정됨
0
이전 유니티강의에서는
public class ResourceManager
{
public T Load<T>(string path) where T : Object
{
return Resources.Load<T>(path);
}
public GameObject Instantiate(string path, Transform parent = null)
{
GameObject prefab = Load<GameObject>($"Prefabs/{path}");
if (prefab == null)
{
Debug.Log($"Filed to load prefab : {path}");
return null;
}
return Object.Instantiate(prefab, parent);
}
public void Destroy(GameObject go)
{
if (go == null)
return;
Object.Destroy(go);
}
}
로 로드할때 path안에 T타입에 해당하는것들을 찾아서 로드했는데
public class ResourceManager
{
private Dictionary<string, UnityEngine.Object> _resources = new Dictionary<string, UnityEngine.Object>();
private Dictionary<string, AsyncOperationHandle> _handles = new Dictionary<string, AsyncOperationHandle>();
#region Load Resource
public T Load<T>(string key) where T : Object
{
if (_resources.TryGetValue(key, out Object resource))
return resource as T;
return null;
}
public GameObject Instantiate(string key, Transform parent = null, bool pooling = false)
{
GameObject prefab = Load<GameObject>(key);
if (prefab == null)
{
Debug.LogError($"Failed to load prefab : {key}");
return null;
}
if (pooling)
return Managers.Pool.Pop(prefab);
GameObject go = Object.Instantiate(prefab, parent);
go.name = prefab.name;
return go;
}
이번 강의에 것은 Dic으로 담아둘곳은 만들었는데 어디서 찾아서 Dic에다 담아두고 Load로 값을 반환하는지 모르겠습니다 모르겠습니다.
다시 계속 코드를 봤는데
_resource라는 dic형태 데이터에
#region Addressable
private void LoadAsync<T>(string key, Action<T> callback = null) where T : UnityEngine.Object
{
// Cache
if (_resources.TryGetValue(key, out Object resource))
{
callback?.Invoke(resource as T);
return;
}
string loadKey = key;
if (key.Contains(".sprite"))
loadKey = $"{key}[{key.Replace(".sprite", "")}]";
var asyncOperation = Addressables.LoadAssetAsync<T>(loadKey);
asyncOperation.Completed += (op) =>
{
_resources.Add(key, op.Result);
_handles.Add(key, asyncOperation);
callback?.Invoke(op.Result);
};
}
_resources.Add(key, op.Result);이 부분에서 데이터를 채워주는것 맞나요?
라이브강의 점점따라가기 힘들어서 시간날때 뒤에서부터 하나하나 계속 보고있습니다..
강의를 다시보니 LoadAsync가아니라 LoadAllAsync에서 싹다 긁어서 dic데이터형태의 _resource에 메모리상에 들고있겠다로 해석되는데 맞나요?
답변 1
0
_resources.Add(key, op.Result);이 부분에서 데이터를 채워주는것 맞나요?
네 맞습니다!
강의를 다시보니 LoadAsync가아니라 LoadAllAsync에서 싹다 긁어서 dic데이터형태의 _resource에 메모리상에 들고있겠다로 해석되는데 맞나요?
네 맞습니다!
초창기 Part3에선 리소스가 적어서 필요할 때 로딩하는 방법을 사용했고
조금 더 진지한 현재의 출시 목표 게임에서는 리소스를 초반에 로드해서 들고 있는 것이죠.
친절한답변 감사합니다.. 열심히할게요