Unity GameFrameWork-Download

Download下载

API

在这里插入图片描述

逻辑流程

首先是加载component
然后是组件初始化Awake的相关逻辑
在这里插入图片描述
主要是获取了 GameFramework的下载管理器,同时添加了4个事件。然后是设置了缓冲区的大小,这个主要是用来断点续传,最后一个是下载超时设置。
在这里插入图片描述
抛出了四个创建的事件。
这四个参数类都差不多,主要是定义了属性,和实现了创造事件的方法。
在这里插入图片描述
然后是 Start的逻辑
在这里插入图片描述
主要是设置了下载辅助器根的位置,然后增加了下载代理辅助器
在这里插入图片描述
然后继续观察代理辅助器 基类
在这里插入图片描述
代理辅助器主要定义了一些事件,这些事件是在GameFrameWork里面,里面还定义了几个下载代理辅助器下载指定地址的数据方法和充值代理下载器的方法。
最后看下GameFramework里面的下载管理器
在这里插入图片描述
里面主要是有一个任务池
可以看到TaskPool里面的Update方法负责任务池轮询任务的处理
在这里插入图片描述
在这里插入图片描述
对于等待的任务会看到他是通过一个链表存储,会调用agent.start()方法,这里的agent是下载的agent,GameFrameWork下面的DownloadManager.DownloadAgent
在这里插入图片描述
在这里插入图片描述
这个m_Helper就是DownloadComponent里面的AddDownloadAgentHelper传递过来的
在这里插入图片描述
在这里插入图片描述
这个就和我们使用的web代理联系起来了
现在的代理用的是UnityWebRequestDownloadAgentHelper
在这里插入图片描述
在这里插入图片描述
里面主要是绑定了四个代理方法,实现了download的具体逻辑
在这里插入图片描述
和重置下载代理辅助器的方法。然后配合了Update()函数里面来判定成功和失败的逻辑处理
在这里插入图片描述
在这里插入图片描述
大致流程就是这样。

使用

//第一个参数和路径和文件名,记得要加上格式,不然还要另外给他指定格式,第二个参数是下载地址
GameEntry.Download.AddDownload("E:/testDownload"+"/inuyasha.png","http://192.168.144.112/Inuyasha.png");
GameEntry.Download.AddDownload("E:/testDownload"+"/半岛铁盒.mp4","http://192.168.144.112/jay.mp4");
GameEntry.Download.AddDownload("E:/testDownload"+"/离开地球表面.flac","http://192.168.144.112/earth.flac");
GameEntry.Download.AddDownload("E:/testDownload"+"/GameFrameworkSetting.dat","http://192.168.144.112/GameFrameworkSetting.dat"); 
第三个参数是优先级,加上了之后,数字越大,请求越先请求
GameEntry.Download.AddDownload("E:/testDownload"+"/inuyasha.png","http://192.168.144.112/Inuyasha.png",1);
GameEntry.Download.AddDownload("E:/testDownload"+"/半岛铁盒.mp4","http://192.168.144.112/jay.mp4",4);
GameEntry.Download.AddDownload("E:/testDownload"+"/离开地球表面.flac","http://192.168.144.112/earth.flac",3);
GameEntry.Download.AddDownload("E:/testDownload"+"/GameFrameworkSetting.dat","http://192.168.144.112/GameFrameworkSetting.dat",2);

在这里插入图片描述
在这里插入图片描述

2022年5月20号更新

演示在界面上下载文件解析使用

这里使用下载图片来说明

测试图片链接1

测试图片链接2

主要逻辑

public void DownLoadFunction()
{
    //获取下载地址,这里使用了一个textfield来输入,可以下载最新的地址
    string url = VerifyModelSingleton.Instance.downloadUrl;
    //这个是用最后的后缀名来作为文件名
    downloadPrefixName = url.Split('/').Last();
    Debug.Log("prefix=========="+downloadPrefixName);
    //下载接口  地址的用persis这个 他是沙盒路径
    GameEntry.Download.AddDownload(Application.persistentDataPath+"/"+downloadPrefixName,url);
    Debug.Log("DownLoadFunction------------");
}
}
//这个是下载成功回调
private void OnDownloadSuccess(object sender,GameFrameworkEventArgs eventArgs)
{
    UnityGameFramework.Runtime.DownloadSuccessEventArgs e = (UnityGameFramework.Runtime.DownloadSuccessEventArgs)eventArgs;
    readDownLoadFile(Application.persistentDataPath+"/"+downloadPrefixName,downloadImage);
    Debug.Log("download Success responseData=========="+e.UserData);
//这里是读取二进制文件流 然后转成sprite 加到我的image上
public void readDownLoadFile(string path,Image image){
        
    //创建文件读取流
    FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
    fileStream.Seek(0, SeekOrigin.Begin);
    //创建文件长度缓冲区
    byte[] bytes = new byte[fileStream.Length]; 
    //读取文件
    fileStream.Read(bytes, 0, (int)fileStream.Length);
    //释放文件读取流
    fileStream.Close();
    fileStream.Dispose();
    fileStream = null;
    
    //创建Texture
    int width=800;
    int height=640;
    Texture2D texture = new Texture2D(width, height);
    texture.LoadImage(bytes);
        //创建Sprite
    Sprite sprite1 = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f));
    image.sprite = sprite1;
    Debug.Log("加载下载好的图片");
}

为什么要文件读取?

因为他不属于GF的文件系统,所以采用系统文件io读取。

如果不是图片怎么办?

这里拿图片举例子是比较直观,正常只要对应的解析读取,可以是任何unity支持的格式。

加载完了就能看到图片了
在这里插入图片描述

欢迎大家交流,有不妥之处,还请指正,谢谢。
ps:欢迎大家进q群交流游戏开发的问题(632313288)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值