初始化仓库
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
//------------------------------------------------------------
|
||||
// Game Framework
|
||||
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
||||
// Homepage: https://gameframework.cn/
|
||||
// Feedback: mailto:ellan@gameframework.cn
|
||||
//------------------------------------------------------------
|
||||
|
||||
using GameFramework.Resource;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using UnityEngine;
|
||||
#if UNITY_5_4_OR_NEWER
|
||||
using UnityEngine.Networking;
|
||||
#endif
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace UnityGameFramework.Runtime
|
||||
{
|
||||
/// <summary>
|
||||
/// 默认资源辅助器。
|
||||
/// </summary>
|
||||
public class DefaultResourceHelper : ResourceHelperBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 直接从指定文件路径加载数据流。
|
||||
/// </summary>
|
||||
/// <param name="fileUri">文件路径。</param>
|
||||
/// <param name="loadBytesCallbacks">加载数据流回调函数集。</param>
|
||||
/// <param name="userData">用户自定义数据。</param>
|
||||
public override void LoadBytes(string fileUri, LoadBytesCallbacks loadBytesCallbacks, object userData)
|
||||
{
|
||||
StartCoroutine(LoadBytesCo(fileUri, loadBytesCallbacks, userData));
|
||||
}
|
||||
|
||||
/// <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_NEWER
|
||||
if (gameObject.activeInHierarchy)
|
||||
{
|
||||
StartCoroutine(UnloadSceneCo(sceneAssetName, unloadSceneCallbacks, userData));
|
||||
}
|
||||
else
|
||||
{
|
||||
SceneManager.UnloadSceneAsync(SceneComponent.GetSceneName(sceneAssetName));
|
||||
}
|
||||
#else
|
||||
if (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, LoadBytesCallbacks loadBytesCallbacks, object userData)
|
||||
{
|
||||
bool isError = false;
|
||||
byte[] bytes = null;
|
||||
string errorMessage = null;
|
||||
DateTime startTime = DateTime.UtcNow;
|
||||
|
||||
#if UNITY_5_4_OR_NEWER
|
||||
UnityWebRequest unityWebRequest = UnityWebRequest.Get(fileUri);
|
||||
#if UNITY_2017_2_OR_NEWER
|
||||
yield return unityWebRequest.SendWebRequest();
|
||||
#else
|
||||
yield return unityWebRequest.Send();
|
||||
#endif
|
||||
|
||||
#if UNITY_2020_2_OR_NEWER
|
||||
isError = unityWebRequest.result != UnityWebRequest.Result.Success;
|
||||
#elif UNITY_2017_1_OR_NEWER
|
||||
isError = unityWebRequest.isNetworkError || unityWebRequest.isHttpError;
|
||||
#else
|
||||
isError = unityWebRequest.isError;
|
||||
#endif
|
||||
bytes = unityWebRequest.downloadHandler.data;
|
||||
errorMessage = isError ? unityWebRequest.error : null;
|
||||
unityWebRequest.Dispose();
|
||||
#else
|
||||
WWW www = new WWW(fileUri);
|
||||
yield return www;
|
||||
|
||||
isError = !string.IsNullOrEmpty(www.error);
|
||||
bytes = www.bytes;
|
||||
errorMessage = www.error;
|
||||
www.Dispose();
|
||||
#endif
|
||||
|
||||
if (!isError)
|
||||
{
|
||||
float elapseSeconds = (float)(DateTime.UtcNow - startTime).TotalSeconds;
|
||||
loadBytesCallbacks.LoadBytesSuccessCallback(fileUri, bytes, elapseSeconds, userData);
|
||||
}
|
||||
else if (loadBytesCallbacks.LoadBytesFailureCallback != null)
|
||||
{
|
||||
loadBytesCallbacks.LoadBytesFailureCallback(fileUri, errorMessage, userData);
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_5_5_OR_NEWER
|
||||
private 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user