using System.Collections.Generic; using Godot; public static class ResourceManager { /// <summary> /// 颜色混合材质 /// </summary> public static ShaderMaterial BlendMaterial { get { if (_shadowMaterial == null) { _shadowMaterial = ResourceLoader.Load<ShaderMaterial>(ResourcePath.resource_materlal_Blend_tres); } return _shadowMaterial; } } private static ShaderMaterial _shadowMaterial; /// <summary> /// 颜色混合Shader /// </summary> public static Shader BlendShader { get { if (_shadowShader == null) { _shadowShader = ResourceLoader.Load<Shader>(ResourcePath.resource_materlal_Blend_gdshader); } return _shadowShader; } } private static Shader _shadowShader; private static readonly Dictionary<string, object> CachePack = new Dictionary<string, object>(); /// <summary> /// 加载资源对象, 并且缓存当前资源对象, 可频繁获取 /// </summary> /// <param name="path">资源路径</param> /// <param name="useCache">是否使用缓存中的资源</param> public static T Load<T>(string path, bool useCache = true) where T : class { if (!useCache) { T res = ResourceLoader.Load<T>(path, null, ResourceLoader.CacheMode.Ignore); if (res == null) { GD.PrintErr("加载资源失败, 未找到资源: " + path); return default; } return res; } if (CachePack.TryGetValue(path, out var pack)) { return pack as T; } pack = ResourceLoader.Load<T>(path); if (pack != null) { CachePack.Add(path, pack); return pack as T; } else { GD.PrintErr("加载资源失败, 未找到资源: " + path); } return default; } }