public static LoadedAssetDebugger Create(string type, string uniqueKey, Object theObject) { if (BaseLoaderDebugger.IsApplicationQuit) { return(null); } //simplified uniqueKey uniqueKey = uniqueKey.Replace(AssetConfig.GetWritablePath(), "").Replace(AssetConfig.GetStreamingAssetsPath(), "").Replace(AssetConfig.GameAssetsFolder, ""); // create a LoadedAssetDebugger GameObject newHelpGameObject = new GameObject(uniqueKey); var newHelp = newHelpGameObject.AddComponent <LoadedAssetDebugger>(); newHelp.type = type; newHelp.theObject = theObject; newHelp.memorySize = string.Format("{0:F5}KB", #if UNITY_2018_1_OR_NEWER UnityEngine.Profiling.Profiler.GetRuntimeMemorySizeLong(theObject) / 1024f #elif UNITY_5_5 || UNITY_2017_1_OR_NEWER UnityEngine.Profiling.Profiler.GetRuntimeMemorySize(theObject) / 1024f #else UnityEngine.Profiler.GetRuntimeMemorySize(theObject) / 1024f #endif ); // add to hierarchy DebuggerObjectTool.SetParent(bigType, type, newHelpGameObject); return(newHelp); }
/// <summary> /// Loads the instance asset async. /// 'assetBundlePath',只需要填相对路径,不用加后缀,如 UI/Panel/MenuPanel,除非ab不是按AssetConfig里面配置的后缀来设置的. /// 'assetName',只需要填相对路径,需要加后缀,如 UI/Panel/MenuPanel.prefab /// </summary> public InstanceAssetLoader LoadInstanceAssetAsync(string assetBundleRelativePath, string assetName, OnLoadInstanceAsset callback) { // 如果是加载ab中的资源,需要填完成的路径,这跟 BuildAssetBundleOptions 有关,参考BundleBuilder.BuildAssetBundle() if (!string.IsNullOrEmpty(assetBundleRelativePath)) { assetName = AssetConfig.GetAssetFullPathInAB(assetName); } string fullRelativePath = AssetConfig.GetAssetBundleFullRelativePath(assetBundleRelativePath); string assetBundleFullPath = AssetConfig.GetGameAssetFullPath(fullRelativePath); LoaderCallback internelHandler = (bool isOk, object resultObject) => { if (isOk) { callback.Invoke(resultObject as Object); } else { callback.Invoke(null); } }; return(BaseLoader.Load <InstanceAssetLoader>(assetBundleFullPath, assetName, callback: internelHandler)); }
public static BaseLoaderDebugger Create(string type, string uniqueKey, BaseLoader loader) { if (IsApplicationQuit) { return(null); } //simplified uniqueKey uniqueKey = uniqueKey.Replace(AssetConfig.GetWritablePath(), "").Replace(AssetConfig.GetStreamingAssetsPath(), "").Replace(AssetConfig.GameAssetsFolder, ""); // create a BaseLoaderDebugger GameObject newHelpGameObject = new GameObject(uniqueKey); var newHelp = newHelpGameObject.AddComponent <BaseLoaderDebugger>(); newHelp.loader = loader; loader.DisposeEvent += () => { DebuggerObjectTool.RemoveFromParent(bigType, type, newHelpGameObject); }; // add to hierarchy DebuggerObjectTool.SetParent(bigType, type, newHelpGameObject); return(newHelp); }
/// <summary> /// Loads the asset bundle async. /// 'assetBundlePath',只需要填相对路径,不用填后缀,如 UI/Panel/MenuPanel,除非ab不是按AssetConfig里面配置的后缀来设置的. /// </summary> public AssetBundleLoader LoadAssetBundleAsync(string assetBundleRelativePath, OnLoadAssetBundle callback) { string fullRelativePath = AssetConfig.GetAssetBundleFullRelativePath(assetBundleRelativePath); string assetBundleFullPath = AssetConfig.GetGameAssetFullPath(fullRelativePath); LoaderCallback internelHandler = (bool isOk, object resultObject) => { if (isOk) { callback.Invoke(resultObject as AssetBundle); } else { callback.Invoke(null); } }; return(BaseLoader.Load <AssetBundleLoader>(assetBundleFullPath, "", callback: internelHandler)); }
public static void PreloadDependencies() { if (_hasPreloadAssetBundleManifest) { return; } _hasPreloadAssetBundleManifest = true; AssetBundle mainAssetBundle = AssetBundle.LoadFromFile(AssetConfig.GetManifestFilePath()); //好处是不管ab放在哪里,都可以统一用一个接口. AssetBundleManifest assetBundleManifest = mainAssetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest; _dependences = new Dictionary <string, string[]>(); foreach (string ab in assetBundleManifest.GetAllAssetBundles()) { _dependences.Add(ab, assetBundleManifest.GetAllDependencies(ab)); } // Debuger.Log("AssetBundleLoader", "assetBundle count = {0}", _dependences.Count); assetBundleManifest = null; mainAssetBundle.Unload(true); mainAssetBundle = null; }
IEnumerator Start() { Object getAsset = null; #if UNITY_EDITOR if (IsEditorLoadAsset) { getAsset = UnityEditor.AssetDatabase.LoadAssetAtPath <Object>(AssetConfig.GetEditorAssetPathRoot() + AssetPath); if (getAsset == null) { Debuger.LogError("Asset is NULL(from {0} Folder): {1}", AssetConfig.GetEditorAssetPathRoot(), AssetPath); } OnFinish(getAsset); } else #endif if (!IsLoadAssetBundle) { string extension = Path.GetExtension(AssetPath); string path = AssetPath.Substring(0, AssetPath.Length - extension.Length); // remove extensions // 去掉 "GameAssets/" if (path.StartsWith(AssetConfig.GameAssetsFolder)) { path = path.Replace(AssetConfig.GameAssetsFolder, ""); } getAsset = Resources.Load <Object>(path); if (getAsset == null) { Debuger.LogError("Asset is NULL(from Resources Folder): {0}", path); } OnFinish(getAsset); } else { _bundleLoader = BaseLoader.Load <AssetBundleLoader>(AssetBundlePath, "", loadMode, null); while (!_bundleLoader.IsCompleted) { if (IsReadyDisposed) // 中途释放 { _bundleLoader.Release(); OnFinish(null); yield break; } yield return(null); } if (!_bundleLoader.IsSuccess) { Debuger.LogError(LOG_TAG, "Load bundle Failed(Error) when Finished: {0}", AssetBundlePath); _bundleLoader.Release(); OnFinish(null); yield break; } var assetBundle = _bundleLoader.assetBundle; var assetName = AssetPath; if (!assetBundle.isStreamedSceneAssetBundle) { if (loadMode == LoadMode.Sync) { getAsset = assetBundle.LoadAsset(assetName); if (getAsset != null) { _bundleLoader.PushLoadedAsset(assetName, getAsset); } } else { var request = assetBundle.LoadAssetAsync(assetName); while (!request.isDone) { yield return(null); } getAsset = request.asset; if (getAsset != null) { _bundleLoader.PushLoadedAsset(assetName, getAsset); } } } else { // if it's a scene in asset bundle, do nothing // but set a default Object as the result //TODO: Debuger.LogWarning(LOG_TAG, "Can't load any assets from A scene asset bundle"); getAsset = null; } if (getAsset == null) { Debuger.LogError(LOG_TAG, "Asset is NULL(From asset bundle): {0}", AssetPath); } } if (Application.isEditor) { if (getAsset != null) { LoadedAssetDebugger.Create(getAsset.GetType().Name, GetUniqueKey(), getAsset); } } OnFinish(getAsset); }