任务26:使用打包工具打包一个PC版本及从资源服务器下载资源

如果大家在这节完成后,使用打包工具却没能正确输出资源到WebRes资源目录,请重新下载Editor.zip替换一下Assets目录下的。

项目进行到这里,必须学习如何打包项目了。因为要测试多个客户端登录账号来调试游戏功能,还得多个人进入房间啊,而且也快到匹配三个玩家把地主斗起来了,总不能开三个unity运行来测试对吧。

对bundle打包与下载的理解

1、打包好的bundle资源文件在资源服务器上某目录下,比如WebRes目录

   里面有新版StreamingAssets目录,带有Version.txt(记录着所有所在目录的资源文件Md5信息)

2、你打包发布后的游戏中有一目录叫\ {game}_Data\ ,{game}是指你发布的游戏名,我们课程项目就叫 Landlords_Data (下文用_Date表达)

   里面有老版StreamingAssets目录,带有Version.txt

3、所以:WebRes上有最新的StreamingAssets,_Data目录有玩家之前安装好的游戏运行后已经下载到他本地的老版StreamingAssets

4、我们需要的是每次运行游戏时,下载WebRes上的Version.txt与_Data目录的Version.txt进行比较,发现服务器上的Version.txt中有新的资源文件,或者老的资源文件有变化,就会从WebRes上下载这些资源放到\ {game}_Data\StreamingAssets\目录下

5、让人炫晕的是,打包时我们会写代码,在项目的Assets目录下也创建了一个StreamingAssets。为什么?因为这里面的东西会在完成打包后,全部复制到_Data目录中

   也就是说不需要下载,游戏安装时_Data目录就会有这个版本带有的资源文件和Version.txt文件

这是一个版本0状态下Version.txt中的内容  \Release\Landlords_Data\StreamingAssets\Version.txt

{"Version":0,"TotalSize":0,"FileInfoDict":{}}

扩展思考:

  • 资源加载的过程中断了呢,再次打开程序重新加载资源会面临什么情况?
  • 之前版本中部分资源被清理软件删除了,而那个版本Version文件还在,问题是不是变得复杂起来了?
  • 如果出现需要重新安装客户端的大版本更新,需要在资源服务器创建不同目录来管理不同版本的StreamingAssets目录又怎么处理呢?
  • 同一个大版本下,如果经历了很多次版本的叠加,我们每次打包测试时,难道都要下载几百M,几个G的资源包再运行?是不是想把中间一些关键小版本(1.2.2,1.3.4,1.5.1,1.7.4)管理起来,能不能做指定某个关键版本到某个关键版本之间的打包更新测试呢?

然而这些都只是你要心中有数的问题,并不是本节需要学习和解决的。

想跑先要学会走路对吧,所以本节打包与加载资源都是基于每次都从版本0,到最新版本的更新。(没错,就是完全无视上面这些问题,哈哈哈。。。)

本节课要做的操作

从本节开始前端提供了web资源服务项目的工程,还有编辑器扩展打包工具

webres&tools.zip (3.13MB)

Editor(含打包导出工具).zip (29.66KB)

1、起动本地资源服务器 

这是用netcore开发的一个win程序,指定了本地的WebRes目录作为本地资源服务器根目录,起动资源服务器后可以浏览器访问

http://127.0.0.1:8080/PC/StreamingAssets

如果WebRes下没有PC目录,在下面创建PC目录,再在PC下创建StreamingAssets目录。

2、在unity中设置好资源服务器的地址

其实就是GlobalProto.txt文件挂到KV预制体上面。

GlobalProto中的内容是 {"AssetBundleServerUrl":"http://127.0.0.1:8080/","Address":"127.0.0.1:10002"}

Address是资源服务程序的地址与端口,AssetBundleServerUrl是浏览器中用来访问的url地址

如果是正式用远程服务器了,你就用真实的远程地址替换AssetBundleServerUrl的内容

3、本地开发项目,本课程的练习是这样安排目录结构的

  • 打包输出在Release目录
  • 起动本地资源服务器程序,这个程序是在FileServer目录下,unity里点web资源服务器,调用的就是他里面的FileServer.dll
  • 资源服务器程序将WebRes作为了本地资源服务的根目录

所以我们项目打包时,就把bundle资源输出到了这个WebRes目录中,你使用远程服务器时,就把WebRes中的内容上传到远程服务器上就行(更换GlobalProto.txt中的地址,打包后就可以提供给玩家下载了)

4、在前端Init文件中添加下载ab包的代码

\Assets\Model\Init.cs

// 下载ab包
await BundleHelper.DownloadBundle();

记得要加在Config资源下载之前执行下载ad包

5、在unity中开始打包输出

设置好图中所示,点开始打包:

工具就会将bundle输出到WebRes目录,将游戏打包输出到Release目录,
将Assets下的StreamingAssets中的内容复制到\Release\ {game}_Data\StreamingAssets\下面。

提供给大家下载的打包工具,如果你需要修改输出目录,后面提供选修课时,介绍打包工具是如何开发和配置输出目录的。

6、打包输出完成后,我们比较一下WebRes与_Data下面的StreamingAssets中的情况

因为本课只考虑版本0到最新版本的下载,所以打包工具的代码处理是,每次打包输出时:

  • 清空Assets目录下StreamingAssets和_Data目录下StreamingAssets中的内容。
  • 在Assets目录下StreamingAssets中生成一个版本0的Version.txt文件,这样打包后的_Data目录下StreamingAssets中就会有这个版本0的Version.txt文件。

7、运行游戏后,再看_Data下面的StreamingAssets中的情况

玩家每次运行游戏,都会下载比较资源服务器上的Version文件,把最新的资源文件下载到他本地的_Data下面的StreamingAssets中。已经有的或者没有变化的资源,就不会再下载了。

通过本节学习,你明白了资源服务器上的,Assets目录里的,_Date目录里的StreamingAssets是什么作用和他们之间的关系了吗?

Assets目录里:作为一开始打包的游戏,需要复制到_Date目录,让游戏安装时的这个版本带有的资源文件和Version.txt文件

资源服务器上:最新版本的资源文件和Version.txt文件

_Date目录里:游戏运行加载和使用的资源

课外练习:

1、在完成本课的基础上,在项目里随便加一个预制体xxx,添加 xxx.unity3d的bundle,

2、_Date目录里复制StreamingAssets到别的地方,然后点打包工具进行打包

3、完成打包输出后,把前面放在别的地方的StreamingAssets,复制回_Date目录覆盖

3、观察资源服务器上资源文件是否增加,Version.txt文件里的版本号

4、从Release里运行游戏,界面显示后,到_Date目录里观察资源文件是否增加,Version.txt文件里的版本号

额外补充知识:

如果你的FileServer输出目录,和资源服务的文件根目录想放在跟我不一样的地方,你需要自己修改和编译FileServer的工程项目。

调试与输出时,要设置好对应的相对目录,比如基于我提供下载项目的目录结构是下面这样设置的:

文件服务器程序输出目录

文件服务器资源根目录

posted @   Domefy  阅读(129)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示