using System.Collections.Generic; using System.Diagnostics; namespace XGame.Framework.Asset.Monitor { public sealed partial class AssetsMonitor { private static AssetsMonitor _instance; private static AssetsMonitor Instance { get { if (_instance == null) { _instance = new AssetsMonitor(); } return _instance; } } /// /// 记录加载数据 /// /// /// [Conditional(MacroDefine.UNITY_EDITOR)] [Conditional(MacroDefine.UNITY_STANDALONE)] [Conditional(MacroDefine.UNITY_STANDALONE_WIN)] public static void RecordAsset(string addressableName, object obj) { #if UNITY_EDITOR || UNITY_STANDALONE || UNITY_STANDALONE_WIN Instance.RecordAssetInternal(addressableName, obj); #endif } /// /// 获取所有已加载过的资源数据 /// /// public static AssetLoadingRecord[] GetRecords() { #if UNITY_EDITOR || UNITY_STANDALONE || UNITY_STANDALONE_WIN return Instance.GetRecordsInternal(); #else return null; #endif } [Conditional(MacroDefine.UNITY_EDITOR)] public static void Write() { #if UNITY_EDITOR || UNITY_STANDALONE || UNITY_STANDALONE_WIN Instance.WriteInternal(); #endif } [Conditional(MacroDefine.UNITY_EDITOR)] public static void Dispose() { #if UNITY_EDITOR || UNITY_STANDALONE || UNITY_STANDALONE_WIN if (_instance != null) { //Write(); _instance._assetInfoMap.Clear(); _instance._assetInfoMap = null; } _instance = null; #endif } #region AssetModule /// /// 返回指定AssetModule的实例数据 /// /// /// public static AssetInstanceCopy[] GetAssetInstances(IAssetModule assetModule) { #if UNITY_EDITOR || UNITY_STANDALONE || UNITY_STANDALONE_WIN if (assetModule is AssetModule impl) { var field = impl.GetType().GetField("assetMap", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); if (field != null) { var assetMap = field.GetValue(impl) as Dictionary; var instances = new AssetInstanceCopy[assetMap.Count]; var index = 0; foreach(var item in assetMap) { var instance = item.Value; instances[index++] = new AssetInstanceCopy() { asset = instance.Asset, reference = instance.Reference, hashcode = instance.Hashcode, name = instance.Name }; } return instances; } } #endif return null; } #endregion } }