//传入Resources下相对路径名称 例如Resources/Game/Effect1 传入Game/Effect1 public ResourceItem loadImmediate(string filePathName, ResourceType resourceType, string archiveName = "Resources") { //使用assetbundle打包 if (UsedAssetBundle) { //添加Resource string completePath = "Resources/" + filePathName; string completeName = ArchiveManager.Instance.getPath("Resources", completePath); //根据场景名称获取asset信息 AssetInfo sceneAssetInfo = mAssetInfoManager.GetAssetInfo(completeName); //获取依赖的asset的索引 foreach (int index in sceneAssetInfo.mDependencys) { //根据索引获取依赖的Asset AssetInfo depencyAsset = mAssetInfoManager.GetAssetInfo(index); string depencyAssetName = depencyAsset.mName; //加载场景依赖assetbundle _LoadImmediate(depencyAssetName, ResourceType.ASSET); } //加载本身预制件 ResourceItem unit = _LoadImmediate(completeName, resourceType); return(unit); } //不使用 else { Object asset = Resources.Load(filePathName); ResourceItem resource = new ResourceItem(null, 0, asset, null, resourceType); return(resource); } }
//单个资源加载 ResourceItem _LoadImmediate(string fileName, ResourceType resourceType) { //没有该资源,加载 if (!mLoadedResourceItem.ContainsKey(fileName)) { //资源大小 int assetBundleSize = 0; byte[] binary = ResourceCommon.getAssetBundleFileBytes(fileName, ref assetBundleSize); AssetBundle assetBundle = AssetBundle.LoadFromMemory(binary); if (!assetBundle) { DebugEx.LogError("create assetbundle " + fileName + "in _LoadImmediate failed"); } Object asset = assetBundle.LoadAsset(fileName); if (!asset) { DebugEx.LogError("load assetbundle " + fileName + "in _LoadImmediate failed"); } //调试用 //DebugEx.LogError("load asset bundle:" + fileName); ResourceItem ru = new ResourceItem(assetBundle, assetBundleSize, asset, fileName, resourceType); //添加到资源中 mLoadedResourceItem.Add(fileName, ru); return(ru); } else { return(mLoadedResourceItem[fileName]); } }
private IEnumerator _loadLevel(string path, HandleFinishLoadLevel handle, ResourceType resourceType, ResourceAsyncOperation operation) { //使用assetbundle打包 if (UsedAssetBundle) { //根据场景名称获取asset信息 AssetInfo sceneAssetInfo = mAssetInfoManager.GetAssetInfo(path); //获取该包总大小 operation.mAllDependencesAssetSize = mAssetInfoManager.GetAllAssetSize(sceneAssetInfo); //获取依赖的asset的索引 foreach (int index in sceneAssetInfo.mDependencys) { //根据索引获取依赖的Asset AssetInfo depencyAsset = mAssetInfoManager.GetAssetInfo(index); string depencyAssetName = depencyAsset.mName; //加载场景依赖assetbundle ResourceItem unit = _LoadImmediate(depencyAssetName, ResourceType.LEVEL); operation.mLoadDependencesAssetSize += unit.AssetBundleSize; } //加载场景assetbundle int scenAssetBundleSize = 0; byte[] binary = ResourceCommon.getAssetBundleFileBytes(path, ref scenAssetBundleSize); AssetBundle assetBundle = AssetBundle.LoadFromMemory(binary); if (!assetBundle) { DebugEx.LogError("create scene assetbundle " + path + "in _LoadImmediate failed"); } //添加场景大小 operation.mLoadDependencesAssetSize += scenAssetBundleSize; AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(ResourceCommon.getFileName(path, false)); operation.asyncOperation = asyncOperation; yield return(asyncOperation); handleResponse(); operation.asyncOperation = null; operation.mComplete = true; operation.mResource = null; if (null != handle) { handle(); } } //不使用 else { ResourceItem level = new ResourceItem(null, 0, null, path, resourceType); //获取加载场景名称 string sceneName = ResourceCommon.getFileName(path, true); AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneName); operation.asyncOperation = asyncOperation; yield return(asyncOperation); handleResponse(); operation.asyncOperation = null; operation.mComplete = true; if (null != handle) { handle(); } } }