2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.6 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Articy.Unity;
using Articy.Unity.Interfaces;
namespace Game
{
public class ResourceManager : ManagerBase<ResourceManager>
{
private Dictionary<string, Object> _resCache = new Dictionary<string, Object>();
private Dictionary<string, Object> _resDraftCache = new Dictionary<string, Object>();
public override void OnCreate()
{
}
public override void Update()
{
}
public override void OnDestroy()
{
}
public T Load<T>(string resName) where T : Object
{
if (!_resCache.ContainsKey(resName))
{
_resCache[resName] = Resources.Load(resName, typeof(T));
}
if (_resCache[resName] == null)
{
Util.Print("Resources没有该资源:", resName);
return default(T);
}
if (!(_resCache[resName] is T))
{
Util.Print("Resources资源类型错误:", resName, typeof(T), _resCache[resName].GetType());
return default(T);
}
return _resCache[resName] as T;
}
public T LoadDraft<T>(ArticyObject resObj) where T : Object
{
if (resObj is null)
{
Util.Print("Draft资源为空");
return default(T);
}
var resName = resObj.TechnicalName;
if (!(resObj is IAsset))
{
Util.Print("Draft资源类型错误:", resName);
}
if (!_resDraftCache.ContainsKey(resName))
{
_resDraftCache[resName] = ((IAsset)resObj).LoadAsset<Object>();
}
if (_resDraftCache[resName] == null)
{
Util.Print("Draft没有该资源:", resName);
return default(T);
}
if (!(_resDraftCache[resName] is T))
{
Util.Print("Draft资源类型错误:", resName, typeof(T));
return default(T);
}
return _resDraftCache[resName] as T;
}
}
abstract partial class Util
{
public static T Load<T>(string resName) where T : Object
{
return ResourceManager.Instance.Load<T>(resName);
}
public static T LoadDraft<T>(ArticyObject resObj) where T : Object
{
return ResourceManager.Instance.LoadDraft<T>(resObj);
}
}
}