- siki学院学习链接:http://www.sikiedu.com/my/course/74
1.总体加载流程
1.2两步是文章所提到过的步骤:AssetBundle学习之路(一) ------ 定义/作用/打包流程
打包之后的asset bundle包一般都是放在服务器端,放在APK中会有两个问题:
-
- 增加APK包的大小,影响用户使用感
- 不能使用热更新
2.加载方式:
具体查看链接:https://docs.unity3d.com/Manual/AssetBundles-Native.html
①.AssetBundle.LoadFromMemoryAsync(异步,对应还有同步方法)
②.AssetBundle.LoadFromFile(也有对应的异步方法)
如果资源是压缩的,下载的时候会开一个线程,这种下载方式会先判断缓存中有没有,没有才去服务器端下载,使用www时要判断是否有错误
WWW.LoadFromCacheOrDownload可以传CRC参数,从服务器下载asset bundle,由于网络中断或者其他问题有可能导致下载不完整的assetbundle,这时候可以用校验码判断下载的文件是否完整,不完整则重新请求服务器进行下载
使用之前首先使用NetBoxs简单的在本地搭建一个服务器
- 首先在NetBox2.exe同一目录下新建一个html网页
index.html内容为:
- 将AssetBundles文件夹放入NetBox2.exe同一目录,同时运行netbox2.exe启动服务器
- 测试:
UnityWebRequest官方代码:
测试代码:
string uri = @"http://localhost/AssetBundles/cubewall.unity3d"; UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri); yield return request.Send(); //两种方式可以得到asset bundle对象 //AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request); AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;//request.downloadHandler可以转化为多种对象 //使用里面的资源 GameObject wallPrefab = ab.LoadAsset<GameObject>("CubeWall"); Instantiate(wallPrefab);
本地测试:
string uri = @"file:///E:\Unity Project Workspace\AssetBundleProject\AssetBundles\cubewall.unity3d";//注意3个斜杠,其他代码都一样
3.加载内容
可以加载图片(Texture)或者预制体(GameObject)或者声音(AudioClip)等等看,同时分为同步和异步两种加载方式