Unity中各类加载方式的比较
发布网友
发布时间:2022-11-26 23:31
我来回答
共1个回答
热心网友
时间:2023-10-12 22:22
本篇文章旨在整理Unity中常见的加载方式,介绍其使用方式、适用的场景,相似的加载方式会进行对比,加强理解和记忆,也可以作为日后的查阅资料。文章将可加载的资源分为两个大类,外部资源和内部资源,内部资源就是Unity发布时默认打进包里的资源,不能直接获取到了,如Resource文件夹里的,外部资源则相反。
流式加载方式对于文件类型没有要求,可以加载图片如jpg、png等,音频如mp3等,视频如mp4等各种格式,下面以图片和视频的加载为例来介绍流式加载。
首先要在脚本中引用 System.IO 命名空间,并定义GetImageByte方法获取文件字节流(该方法不仅限于获取图片),参数path为图片的路径(带后缀),unity中一般以 Application.dataPath 加上图片在Assets文件下的相对路径拼接而成,比如下图中我从项目截取的目标图片01,其路径为 Application.dataPath + "/Textures/PuzzleGame/InitImages/01.png" 。
在以上基础上,定义图片加载方法,主要使用的就是Texture2D类下的LoadImage方法,将图片的字节流转化为Texture2D格式的图片,方法实现如下:
初始化Texture2D对象时,构造函数中长宽初始值可以任意指定,比如我指定为(1,1),LoadImage方法会根据原图大小覆盖掉初始值。
获取文件夹下所有格式的图片,思路就是选定需要获取的图片格式,通过 Dictionary.GetFiles 方法拿到这些格式图片的全部路径,并添加到路径到List链表中,然后对链表中每一个路径使用LoadOneImage方法,方法实现如下:
这儿指定了四种格式,可以根据需求自行修改。
UnityWebRequest类是unity5.x之后用来取代WWW,满足今天http通信需求的新api类
using (UnityWebRequest www = UnityWebRequest.Post(url, new WWWForm()))
www方式支持http和file两种协议,因此可以加载网络上以及本地的图片,文本,音频等资源,www方式需要在协程中实现,需使用 StartCoroutine 调用其所在方法,网络资源的路径就为其url,本地资源使用“file://”加上绝对路径作为参数,比如D盘下Image文件夹下的图片01.png,其对应的path参数就是 “file://D:\Image\01.png” ,方法实现如下:
WWW方式的加载速度比较慢,属于旧版本方法,现在官方推荐使用UnityWebRequest
使用 resources.load 方式需要将资源文件放到Resources文件夹下,这是unity的规定,该文件夹下的所有内容在发布时都会被打包到安装包里,如果你使用了Resources文件来管理资源,你所发布的应用程序文件的Data目录下,会有一个resources.assets文件,这就是Resources文件夹编译后生成的。
正因为如此,Resources管理的资源对分包发布和版本更新是不友好的,如果确定该资源在项目的整个生命周期中都不会有变动,则可以考虑放入Resources文件夹,否则使用bundle来管理资源会更灵活。
Resources.load() 、 Resources.loadAll() 的路径参数为资源在Resources文件夹下的相对路径。