从该基类派生以提供对特定Resources 方法的 C# 行为的替代实现。
提供的示例将处理较慢的 Resources API 所花费的时间记录到播放器或编辑器日志。
using System; using System.Diagnostics; using UnityEngine; using Object = UnityEngine.Object; using Debug = UnityEngine.Debug;
public class ResourcesPerformanceLogger : ResourcesAPI { [RuntimeInitializeOnLoadMethod] static void OnRuntimeMethodLoad() { ResourcesAPI.overrideAPI = new ResourcesPerformanceLogger(); }
protected override Object[] FindObjectsOfTypeAll(Type systemTypeInstance) { Stopwatch timer = new Stopwatch(); timer.Start(); Object[] results = base.FindObjectsOfTypeAll(systemTypeInstance); timer.Stop(); Debug.Log($"FindObjectsOfTypeAll({systemTypeInstance}) Time: {timer.Elapsed}"); return results; }
protected override Shader FindShaderByName(string name) { Stopwatch timer = new Stopwatch(); timer.Start(); Shader result = base.FindShaderByName(name); timer.Stop(); Debug.Log($"FindShaderByName({name}) Time: {timer.Elapsed}"); return result; }
protected override Object[] LoadAll(string path, Type systemTypeInstance) { Stopwatch timer = new Stopwatch(); timer.Start(); Object[] results = base.LoadAll(path, systemTypeInstance); timer.Stop(); Debug.Log($"LoadAll({path}, {systemTypeInstance}) Time: {timer.Elapsed}"); return results; } }
overrideAPI | 用于处理覆盖的 Resources 方法的特定 ResourcesAPI 实例。 |
FindObjectsOfTypeAll | 用于自定义 Resources.FindObjectsOfTypeAll 函数行为的覆盖。 |
FindShaderByName | 用于自定义 Shader.Find 函数行为的覆盖。 |
Load | 用于自定义 Resources.Load 函数行为的覆盖。 |
LoadAll | 用于自定义 Resources.LoadAll 函数行为的覆盖。 |
LoadAsync | 用于自定义 Resources.LoadAsync 函数行为的覆盖。 |
UnloadAsset | 用于自定义 Resources.Unload 函数行为的覆盖。 |