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.
167 lines
4.7 KiB
167 lines
4.7 KiB
11 months ago
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.IO;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Networking;
|
||
|
|
||
|
/// <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目录异步加载文件,得到文件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);
|
||
|
}
|
||
|
}
|