/// <summary> /// Load the assets directly from the asset folder, noted that it can operate in editor only. /// **SHOULD BE ASYNCHRONOUS FUNCTION THEORETICALLY BUT NOT SUPPORTED IN PERSONAL VERSION** /// </summary> public static LocalAssetsLoader LoadAssetsInEditor(string assetBundleName, string assetName, System.Type type, Action <Exception> errorHandler) { LocalAssetsLoader loader; string[] assetPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(assetBundleName, assetName); if (assetPaths.Length == 0) { errorHandler(new Exception("Asset Not Found!")); } // get the first asset we found loader = new LocalAssetsLoader(assetPaths[0], type); return(loader); }
/// <summary> /// Loads the assets from specific path or assets folder. /// Noted that assets bundle should be downloaded and be stored before calling this function. /// </summary> public static IEnumerator LoadAssets <T>(string assetBundleName, string assetName, string filePath, Action <float> progressFunction, Action <T> completeFunction, Action <Exception> errorHandler) where T : UnityEngine.Object { #if UNITY_EDITOR if (loadFromAssetFolder) { LocalAssetsLoader loader = LoadAssetsInEditor(assetBundleName, assetName, typeof(T), errorHandler); while (!loader.isDone) { yield return(null); } if (loader.isDone) { completeFunction(loader.GetAsset <T>()); } } else { #endif // ensure no assetbundle is being loaded at the moment while (loadingAssetBundle) { // wait until asset bundle is being loaded yield return(new WaitForSecondsRealtime(0.1f)); } AssetBundle assetBundle = assetBundles.Find(x => x.name.Equals(assetBundleName)); if (assetBundle == null) { yield return(LoadAssetsFromFolderAsync(filePath + assetBundleName, progressFunction, errorHandler)); while (loadingAssetBundle) { // wait until asset bundle is being loaded yield return(new WaitForSecondsRealtime(0.1f)); } } AssetBundleRequest request; request = assetBundle.LoadAssetAsync(assetName, typeof(T)); while (!request.isDone) { yield return(null); } if (request.isDone) { completeFunction((T)request.asset); } #if UNITY_EDITOR } #endif }