using UnityEngine;
using System.Collections.Generic;
// GameObject vaPlayerObj = ResourceManager.CreateInstance("Player");
// OtherObj vaOtherObj = ResourceManager.CreateInstance("Other");
// ResourceManager.Get.Release();
public sealed class ResourceManager : MonoBehaviour
{
private static ResourceManager ms_Instance;
public static ResourceManager Get {
get {
if (ms_Instance == null)
ms_Instance = new ResourceManager();
return ms_Instance;
}
}
private Dictionary<string, CACHED_OBJECT> m_hCachedObjTable =
new Dictionary<string, CACHED_OBJECT>();
public struct CACHED_OBJECT
{
public enum eLinkType { RESOURCE, BUNDLE }
public UnityEngine.Object obj;
public eLinkType type;
public AssetBundle bundle;
}
public T CreateInstance<T>(string strFilePath, bool bCaching = true)
where T : UnityEngine.Component
{
var vaObject = Load(strFilePath, bCaching);
if (vaObject == null)
{
return default(T);
}
return ResourceManager.Instantiate<T>(vaObject);
}
public UnityEngine.Object Load(string path, bool bCaching)
{
UnityEngine.Object obj = null;
obj = GetCachedObject(path);
if (obj == null)
{
obj = Resources.Load(path);
if(bCaching)
AddCaching(path, obj, CACHED_OBJECT.eLinkType.RESOURCE);
}
return obj;
}
private UnityEngine.Object GetCachedObject(string strFilePath)
{
if (m_hCachedObjTable.ContainsKey(strFilePath))
{
return m_hCachedObjTable[strFilePath].obj;
}
return null;
}
private void AddCaching(string strFilePath, UnityEngine.Object obj,
CACHED_OBJECT.eLinkType eType, AssetBundle kAssetbundle = null)
{
if (obj == null)
{
return;
}
CACHED_OBJECT cache = new CACHED_OBJECT();
cache.obj = obj;
cache.type = eType;
cache.bundle = kAssetbundle;
if (m_hCachedObjTable.ContainsKey(strFilePath) == false)
{
m_hCachedObjTable[strFilePath] = cache;
}
}
public static T Instantiate<T>(UnityEngine.Object obj) where T : UnityEngine.Object
{
if (obj == null)
{
return default(T);
}
return UnityEngine.Object.Instantiate(obj) as T;
}
public void Release()
{
AsyncOperation t;
Release(out t);
}
public void Release(out AsyncOperation kRelease_AsyncOp)
{
var list = new List<CACHED_OBJECT>(m_hCachedObjTable.Values);
m_hCachedObjTable.Clear();
kRelease_AsyncOp = Resources.UnloadUnusedAssets();
}
}
댓글
댓글 쓰기