//------------------------------------------------------------// Game Framework// Copyright © 2013-2019 Jiang Yin. All rights reserved.// Homepage: http://gameframework.cn/// Feedback: mailto:jiangyin@gameframework.cn//------------------------------------------------------------using GameFramework.Resource;using System.Collections;using UnityEngine;#if UNITY_5_4_OR_NEWERusing UnityEngine.Networking;#endifusing UnityEngine.SceneManagement;namespace UnityGameFramework.Runtime{/// <summary>/// 默认资源辅助器。/// </summary>public class DefaultResourceHelper : ResourceHelperBase{/// <summary>/// 直接从指定文件路径读取数据流。/// </summary>/// <param name="fileUri">文件路径。</param>/// <param name="loadBytesCallback">读取数据流回调函数。</param>public override void LoadBytes(string fileUri, LoadBytesCallback loadBytesCallback){StartCoroutine(LoadBytesCo(fileUri, loadBytesCallback));}/// <summary>/// 卸载场景。/// </summary>/// <param name="sceneAssetName">场景资源名称。</param>/// <param name="unloadSceneCallbacks">卸载场景回调函数集。</param>/// <param name="userData">用户自定义数据。</param>public override void UnloadScene(string sceneAssetName, UnloadSceneCallbacks unloadSceneCallbacks, object userData){#if UNITY_5_5_OR_NEWERif (gameObject.activeInHierarchy){StartCoroutine(UnloadSceneCo(sceneAssetName, unloadSceneCallbacks, userData));}else{SceneManager.UnloadSceneAsync(SceneComponent.GetSceneName(sceneAssetName));}#elseif (SceneManager.UnloadScene(SceneComponent.GetSceneName(sceneAssetName))){if (unloadSceneCallbacks.UnloadSceneSuccessCallback != null){unloadSceneCallbacks.UnloadSceneSuccessCallback(sceneAssetName, userData);}}else{if (unloadSceneCallbacks.UnloadSceneFailureCallback != null){unloadSceneCallbacks.UnloadSceneFailureCallback(sceneAssetName, userData);}}#endif}/// <summary>/// 释放资源。/// </summary>/// <param name="objectToRelease">要释放的资源。</param>public override void Release(object objectToRelease){AssetBundle assetBundle = objectToRelease as AssetBundle;if (assetBundle != null){assetBundle.Unload(true);return;}/* Unity 当前 Resources.UnloadAsset 在 iOS 设备上会导致一些诡异问题,先不用这部分SceneAsset sceneAsset = objectToRelease as SceneAsset;if (sceneAsset != null){return;}Object unityObject = objectToRelease as Object;if (unityObject == null){Log.Warning("Asset is invalid.");return;}if (unityObject is GameObject || unityObject is MonoBehaviour){// UnloadAsset may only be used on individual assets and can not be used on GameObject's / Components or AssetBundles.return;}Resources.UnloadAsset(unityObject);*/}private void Start(){}private IEnumerator LoadBytesCo(string fileUri, LoadBytesCallback loadBytesCallback){byte[] bytes = null;string errorMessage = null;#if UNITY_5_4_OR_NEWERUnityWebRequest unityWebRequest = UnityWebRequest.Get(fileUri);#if UNITY_2017_2_OR_NEWERyield return unityWebRequest.SendWebRequest();#elseyield return unityWebRequest.Send();#endifbool isError = false;#if UNITY_2017_1_OR_NEWERisError = unityWebRequest.isNetworkError;#elseisError = unityWebRequest.isError;#endifbytes = unityWebRequest.downloadHandler.data;errorMessage = isError ? unityWebRequest.error : null;unityWebRequest.Dispose();#elseWWW www = new WWW(fileUri);yield return www;bytes = www.bytes;errorMessage = www.error;www.Dispose();#endifif (loadBytesCallback != null){loadBytesCallback(fileUri, bytes, errorMessage);}}#if UNITY_5_5_OR_NEWERprivate IEnumerator UnloadSceneCo(string sceneAssetName, UnloadSceneCallbacks unloadSceneCallbacks, object userData){AsyncOperation asyncOperation = SceneManager.UnloadSceneAsync(SceneComponent.GetSceneName(sceneAssetName));if (asyncOperation == null){yield break;}yield return asyncOperation;if (asyncOperation.allowSceneActivation){if (unloadSceneCallbacks.UnloadSceneSuccessCallback != null){unloadSceneCallbacks.UnloadSceneSuccessCallback(sceneAssetName, userData);}}else{if (unloadSceneCallbacks.UnloadSceneFailureCallback != null){unloadSceneCallbacks.UnloadSceneFailureCallback(sceneAssetName, userData);}}}#endif}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。