TyeUnityToolsAssetBundleCS.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Video;
public class TyeUnityToolsAssetBundleCS
{
///-- 2.3 加载AB包: UnityWebRequestAssetBundle,
///【AB包在制作是区分平台, iOS端和Android端的AB包不通用】;
///【AB包注意事项:资源文件名必须小写】;
public static IEnumerator yeGetABForUnityWebRequest(string eStrUrl, Action<UnityWebRequest> eCallback)
{
UnityWebRequest eWebRequest = UnityWebRequestAssetBundle.GetAssetBundle(eStrUrl);
yield return eWebRequest.SendWebRequest();
if (eWebRequest.isNetworkError || eWebRequest.isHttpError)
{
Debug.Log($"---AB包加载错误=={eWebRequest.error} --");
}
else
{
eCallback.Invoke(eWebRequest); // 加载完成回调;
//yield return null;
//yield break;
}
}
// 解AB包:
private void yeCallbackForUnityWebRequestAB(object eObj)
{
//eTimeStart = Time.time;
//double eTimeDown = Time.time;
//Debug.Log($"---下载AB包的时间:{Time.time - eTimeDown} --");
UnityWebRequest eRequest = eObj as UnityWebRequest;
AssetBundle eAB = DownloadHandlerAssetBundle.GetContent(eRequest); // 获取请求到的AB包;
yeABToUnpack(eAB);
eRequest.Dispose(); // 释放请求资源;
}
void yeABToUnpack(AssetBundle eAB)
{
///-- 1.获取 AB包中 所有物体的名字:
string[] eArrAllName = eAB.GetAllAssetNames();
foreach (string eFullName in eArrAllName)
{
Debug.Log("---物体完整名字(带路径及类型):" + eFullName);
//---物体名字:assets/testab/testimg.jpeg
//---物体名字:assets/testab/testvideo.webm
}
///-- 2. 加载AB包中所有的物体:
UnityEngine.Object[] eArrAllObj = eAB.LoadAllAssets();
foreach (UnityEngine.Object eObjLS in eArrAllObj)
{
Debug.Log(eObjLS.name); // testimg (不带后缀名);
//yeABForLoadAsset(eAB, eObjLS.name);
}
}
// 通过名字,获取AB包中的数据:
void yeABForLoadAsset(AssetBundle eAB, string eStrName = null)
{
//--- 1.Load Image:(动态更换背景图片) testimg:图片在AB包中的名字;
Texture2D eTexture = (Texture2D)eAB.LoadAsset<Texture>("testimg"); //指定加载的类型;
//Texture2D eTexture = (Texture2D)eAB.LoadAsset("testimg");
//System.IO.File.WriteAllBytes("assets/tyesaveimg/tye.png", eTexture.EncodeToJPG()); //保存图片;
//Sprite eSprite = yeSpriteCreate(eTexture);
//Destroy(eTexture); // 删除对象;
//---2.Load Video:加载AB包中的 视频 资源:【 MovieTexture : 在此版本上不可用了 】;
//VideoClip eVideoClip = eAB.LoadAsset<VideoClip>("testvideo") as VideoClip; //testvideo:视频在AB包中的名字;
VideoClip eVideoClip = eAB.LoadAsset("testvideo") as VideoClip; //testvideo:视频在AB包中的名字;
//- 播放视频:【(边解压边播放)直接播放会卡,(要解压保存到本地再播)】
yeVideoPlay(eVideoClip);
//eBundle.Unload(false); // 卸载AB包:【如果在此时卸载AB包,播放AB包中的视频就会出错】
/// Save Video: (保存视频)
//--- 1: XXX 【VideoClip不能被序列化】
//object eGo = eVideoClip as object;
//byte[] eArrTest = CSSaveFile.yeObject2Bytes(eGo);
//System.IO.File.WriteAllBytes(eStrNameSave, (eVideoClip.frameRate) );
//--- 2.
FileStream eFS = new FileStream(eStrNameSave, FileMode.CreateNew);
//Debug.Log($"---fs.Length {eFS.Length} --");
//StreamWriter eSW = new StreamWriter(eStrNameSave);
//eSW.Write(eVideoClip);
//eSW.Close();
//eFS.Close();
//AssetDatabase.Refresh();
}
///==
Sprite yeSpriteCreate(Texture2D eTexture2D, UnityEngine.UI.Image eImg = null)
{
Sprite eSprite = Sprite.Create(eTexture2D, new Rect(0, 0, eTexture2D.width, eTexture2D.height), Vector2.zero);
if (null != eImg)
{
eImg.sprite = eSprite;
}
return eSprite;
}
void yeVideoPlay(VideoClip eVideoClip)
{
//eVideoPlayer.clip = eVideoClip; // 指定播放的视频源;
//eVideoPlayer.Play();
//eVideoPlayer.isLooping = true;
}
}