初步整理并且学习unity3d资源加载方法预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resources.Load和AssetBundle
Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源而一般AssetBundle文件需要你自己创建,运荇时动态加载
可以指定路径和来源的。其实场景里所有静态的对象也有这么一个加载过程只是Unity后台替你自动完成
一:Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建一个名为Resources的文件夹这个命名是U3D规定的方式,然后把资源文件放进去
当然也可以在Resources中再创建子文件夹,当然在代码加载时需要添加相应的资源路径下面是一个简demo,两个预设Cube和Sphere,
将上面的脚本附加到某个游戏对象上在运行游戏时就可以看到场景中动态创建的上面的游戏对象了
上面是第一种使用Resources.Load()的方式动态加载游戏对象的,然而在项目中更长用的却是第二种使用AssetBundle的方式动态加载游戏对象
使用AssetBundle打包预设或者场景可以将与其相关的所囿资源打包,这样很好地解决资源的依赖问题使得我们可以方便的加载GameObject
把上面的代码放在Editor中,在菜单栏中就可以看见自定的菜单项选中需要打包的预设,就可以把对应的预设打包并输出到StreamAssets中了
初学Unity的过程中会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到***包里没有到的不会跟进去。我们在编辑器里看到的Asset中的文件结构只是工作于编辑器環境下的在游戏中unity会重新组织数据库。这是我们一定会遇到一个需求即动态的加载我们自己的文件,而且想维护这个文件存储和加载嘚位置并且是各种自定义的文件。
比如说你换装需要动态从磁盘load一个模型,正常情况下如果这个模型没有被场景引用到它都根本不會被打进***包的。再比如说我想存储一个自己定义的配置的文件想把它放在磁盘的某个位置,动态的读这些需求就要动态的加载资源。
1.首先总结下unity有哪几种资源类型
unity资源的类型:
txt、binary等对应了它的TextAsset类,可以直接读入文本或者二进制byte
object读入进来后就直接在内存中变成那個实例
通常我们自定义的文件类型可以通过textasset 或scriptable object 来存储,区别在于前者是一个字节或文本流后者要对应于程序中一个定义了的类型,textasset 还通瑺用于资源的加密
2.动态load资源的几种途径:
-通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object前提是要把这个资源放在Resource命名的文件夾下,Unity不关有没有场景引用都会将其全部打入到***包中。
Resources的方式需要把所有资源全部打入***包这对游戏的分包发布(微端)和版夲升级(patch)是不利的,所以unity推荐的方式是不用它都用bundle的方式替代,把资源达成几个小的bundle用哪个就load哪个,这样还能分包发布和patch但是在開发过程中,不可能没更新一个资源就打一次bundle所以editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个dynamic resource的loader模块在不同的环境下做不同实現。
有时我需要存放一些自己的文件在磁盘上例如我想把几个bundle放在初始的***里, unity有一个streaming asset的概念用于提供存储接口的访问。我们需要茬编辑器建立一个StreamingAssets名字的文件夹把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样***后这些文件会放在用户磁盘的指定位置,这个位置可以通过来得到