TyeUnityToolsAssetBundleCS

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值