You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.2 KiB
184 lines
5.2 KiB
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using UnityEngine; |
|
using UnityEngine.Networking; |
|
using Cysharp.Threading.Tasks; |
|
|
|
/// <summary> |
|
/// 加载文件辅助类 |
|
/// </summary> |
|
public class LoadFileHelper : MonoBehaviour |
|
{ |
|
public static LoadFileHelper Instance = null; |
|
|
|
void Awake() |
|
{ |
|
DontDestroyOnLoad(this); |
|
Instance = this; |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录异步加载文件,得到文件string |
|
/// </summary> |
|
/// <param name="path"></param> |
|
/// <param name="complete"></param> |
|
public void LoadFileStringAsync(string path, Action<string> complete) |
|
{ |
|
if (string.IsNullOrEmpty(path)) |
|
{ |
|
throw new ArgumentNullException(path); |
|
} |
|
|
|
StartCoroutine(GetFileString(path, complete)); |
|
} |
|
|
|
private IEnumerator GetFileString(string path, Action<string> complete) |
|
{ |
|
using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(path)) |
|
{ |
|
yield return unityWebRequest.SendWebRequest(); |
|
|
|
string fileString = unityWebRequest.downloadHandler.text; |
|
|
|
if (complete != null) |
|
complete(fileString); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录异步加载文件,得到文件string |
|
/// </summary> |
|
/// <param name="path"></param> |
|
/// <returns></returns> |
|
public async UniTask<string> LoadFileStringAsync(string path) |
|
{ |
|
using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(path)) |
|
{ |
|
await unityWebRequest.SendWebRequest(); |
|
|
|
string fileString = unityWebRequest.downloadHandler.text; |
|
|
|
return fileString; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录异步加载文件,得到文件byte数组 |
|
/// </summary> |
|
/// <param name="path"></param> |
|
/// <param name="complete"></param> |
|
public void LoadFileBytesAsync(string path, Action<byte[]> complete) |
|
{ |
|
if (string.IsNullOrEmpty(path)) |
|
{ |
|
throw new ArgumentNullException(path); |
|
} |
|
|
|
StartCoroutine(GetFileBytes(path, complete)); |
|
} |
|
|
|
private IEnumerator GetFileBytes(string path, Action<byte[]> complete) |
|
{ |
|
using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(path)) |
|
{ |
|
yield return unityWebRequest.SendWebRequest(); |
|
|
|
byte[] bytes = unityWebRequest.downloadHandler.data; |
|
|
|
if (complete != null) |
|
complete(bytes); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录异步加载多张或一张图片 |
|
/// </summary> |
|
/// <param name="paths"></param> |
|
/// <param name="complete"></param> |
|
public void LoadPicturesAsync(string[] paths, Action<List<Texture2D>> complete) |
|
{ |
|
if (paths != null) |
|
{ |
|
StartCoroutine(LoadTexture2Ds(paths, complete)); |
|
} |
|
} |
|
|
|
private IEnumerator LoadTexture2Ds(string[] paths, Action<List<Texture2D>> complete) |
|
{ |
|
List<Texture2D> textures = new List<Texture2D>(); |
|
|
|
foreach (var path in paths) |
|
{ |
|
using (UnityWebRequest unityWebRequest = UnityWebRequestTexture.GetTexture(path)) |
|
{ |
|
yield return unityWebRequest.SendWebRequest(); |
|
|
|
Texture2D texture = DownloadHandlerTexture.GetContent(unityWebRequest); |
|
|
|
textures.Add(texture); |
|
} |
|
} |
|
|
|
if (complete != null) |
|
{ |
|
complete(textures); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录异步加载多个或一个AB |
|
/// </summary> |
|
/// <param name="paths"></param> |
|
/// <param name="complete"></param> |
|
public void LoadAssetBundlesAsync(string[] paths, Action<List<AssetBundle>> complete) |
|
{ |
|
if (paths != null) |
|
{ |
|
StartCoroutine(LoadAssetBundles(paths, complete)); |
|
} |
|
} |
|
|
|
private IEnumerator LoadAssetBundles(string[] paths, Action<List<AssetBundle>> complete) |
|
{ |
|
List<AssetBundle> assetBundles = new List<AssetBundle>(); |
|
|
|
foreach (var path in paths) |
|
{ |
|
using (UnityWebRequest unityWebRequest = UnityWebRequestAssetBundle.GetAssetBundle(path)) |
|
{ |
|
yield return unityWebRequest.SendWebRequest(); |
|
|
|
AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(unityWebRequest); |
|
|
|
assetBundles.Add(assetBundle); |
|
} |
|
} |
|
|
|
if (complete != null) |
|
{ |
|
complete(assetBundles); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 从本地外部目录或本地StreamingAssets目录同步加载文件,得到文件string |
|
/// </summary> |
|
/// <param name="path"></param> |
|
/// <param name="complete"></param> |
|
public void LoadFileStringSync(string path, Action<string> complete) |
|
{ |
|
if (!File.Exists(path)) |
|
return; |
|
StreamReader sr = new StreamReader(path); |
|
if (sr == null) |
|
return; |
|
|
|
string fileString = sr.ReadToEnd(); |
|
sr.Close(); |
|
sr.Dispose(); |
|
if (complete != null) |
|
complete(fileString); |
|
} |
|
}
|
|
|