获取AssetBundle:
IEnumerator GetAssetBundle(string path, UnityAction<AssetBundle> onGetAssetBundle)
{
using (UnityWebRequest webRequest = UnityWebRequestAssetBundle.GetAssetBundle(path))
{
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError)
Debug.Log("error = " + webRequest.error);
else
{
AssetBundle ab = (webRequest.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
onGetAssetBundle?.Invoke(ab);
}
}
}
获取文本:
IEnumerator GetJson(string path, UnityAction<string> onGetJson)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(path))
{
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError)
Debug.Log("error = " + webRequest.error);
else
{
string json = webRequest.downloadHandler.text;
onGetJson?.Invoke(json);
}
}
}
获取图片:
IEnumerator GetTexture2D(string path, UnityAction<Texture2D> onGetTexture2D)
{
using (UnityWebRequest webRequest = UnityWebRequestTexture.GetTexture(path))
{
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError)
Debug.Log("error = " + webRequest.error);
else
{
Texture2D tex2d = DownloadHandlerTexture.GetContent(webRequest);
onGetTexture2D?.Invoke(tex2d);
}
}
}
获取音频:
IEnumerator GetAudio(string path, AudioType type, UnityAction<AudioClip> onGetAudio)
{
using (UnityWebRequest webRequest = UnityWebRequestMultimedia.GetAudioClip(path, type))
{
yield return webRequest.SendWebRequest();
if (webRequest.result == UnityWebRequest.Result.ConnectionError)
Debug.Log("error = " + webRequest.error);
else
{
AudioClip clip = DownloadHandlerAudioClip.GetContent(webRequest);
onGetAudio?.Invoke(clip);
}
}
}
加载视频:
这个事情早期版本要用到MovieTexure之类的,Unity2021版本加载视频实际上和UnityWebRequest没有毛线关系,请使用VideoPlayer,哈哈。
另附AssetBundle创建参考脚本(这个脚本注意放到Editor文件夹下):
using System.IO;
using UnityEditor;
using UnityEngine;
public class BuildAssetBundle : MonoBehaviour
{
static void Package(BuildTarget buildTarget)
{
string packagePath = EditorUtility.OpenFolderPanel("Set " + buildTarget + " Save Path", Application.dataPath, "");
if (packagePath.Length <= 0 || !Directory.Exists(packagePath))
{
Debug.Log("Directory Error!");
return;
}
BuildPipeline.BuildAssetBundles(packagePath, BuildAssetBundleOptions.None, buildTarget);
AssetDatabase.Refresh();
}
[MenuItem("BuildAssetBundle / WebGL")]
static void PackageWebGL()
{
Package(BuildTarget.WebGL);
}
[MenuItem("BuildAssetBundle / Window")]
static void PackageWindow()
{
Package(BuildTarget.StandaloneWindows);
}
[MenuItem("BuildAssetBundle / Android")]
static void PackageAndroid()
{
Package(BuildTarget.Android);
}
}