using System.Collections.Generic; using UnityEngine; using Articy.Unity; using Articy.Unity.Interfaces; namespace Game { public class ResourceManager : ManagerBase { private Dictionary _resCache = new Dictionary(); private Dictionary _resDraftCache = new Dictionary(); public override void OnCreate() { } public override void Update() { } public override void OnDestroy() { } public T Load(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(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(); } 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(string resName) where T : Object { return ResourceManager.Instance.Load(resName); } public static T LoadDraft(ArticyObject resObj) where T : Object { return ResourceManager.Instance.LoadDraft(resObj); } } }