相关网盘免费资源下载...
1. 当下载unity3D、txt、xml文件时,切记在IIS中添加相应的MIME类型,否则会出现400错误
2. www、bundleAsset、Asset之间的关系:
1. WebStream:包括了压缩的文件,解压所需的缓存,以及解压后的文件。(但实际测试的时候www并不占用太多内存,感觉是资源的引用)
2. AssetBundle:Web Stream中的文件的映射,或者说引用。(实际测试时:将资源释放到内存中)
3. 实例化之后的对象:就是引擎的各种资源文件了,会在内存中创建出来。
那就分别解析一下:
1 |
WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version) |
1. 将压缩的文件读入内存中
2. 创建解压所需的缓存
3. 将文件解压,解压后的文件进入内存
4. 关闭掉为解压创建的缓存
1 |
AssetBundle bundle = www.assetBundle; |
1. AssetBundle此时相当于一个桥梁,从Web Stream解压后的文件到最后实例化创建的对象之间的桥梁。
2. 所以AssetBundle实质上是Web Stream解压后的文件中各个对象的映射。而非真实的对象。
3. 实际的资源还存在Web Stream中,所以此时要保留Web Stream。
1 |
Instantiate(bundle.mainAsset); |
通过AssetBundle获取资源,实例化对象
最后各位可能看到了官网中的这个例子使用了:
1 2 |
using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){ } |
这种using的用法。这种用法其实就是为了在使用完Web Stream之后,将内存释放掉的。因为WWW也继承了idispose的接口,所以可以使用using的这种用法。其实相当于最后执行了:
1 2 |
//删除Web Stream www.Dispose(); |
OK,Web Stream被删除掉了。那还有谁呢?对Assetbundle。那么使用
1 2 |
//删除AssetBundle bundle.Unload(false); |
ok,写到这里就先打住啦。写的有点超了。有点赶也有点临时,日后在补充编辑。
3.
Ø 资源管理器类,UnloadUnusedAsset函数保证只有在真正有资源需要卸载的时候才调用Resources.UnloadUnusedAssets();
有一点需要注意的地方就是,在资源解压完成后,一定要记得要释放压缩包内存,即:
www.assetBundle.LoadAsync(GetAssetName(name),type);
www.assetBundle.Unload(false);
因为,www压缩包数据只能手动卸载,跳转场景都不会删除,所以加载完立即unload是一个好习惯。
还有一点需要注意的www.assetBundle.mainAsset是一个同步加载的操作,也就是说调用此函数时会卡。
Ø 在测试情况下你可能会频繁的打包生成Assetbundle,如果忘记改版本号的话可能会读取之前的缓存,可能就会看不到新的效果,所以我建议在bunild Assetbundle的时候强制清空一下缓存。
Caching.CleanCache();
Ø AssetBundle本身的资源我们统称为 webstream,这部分内存和加载出来的 GameObject 需要的资源内存量相当(webstream:Object ~= 1.25:1),因此加载完 Object 后,webstream需要及时释放。
Ø 几种AssetBundle创建方式的差异:
CreateFromFile:这种方式不会把整个硬盘AssetBundle文件都加载到内存来,而是类似建立一个文件操作句柄和缓冲区,需要时才实时Load,所以这种加载方式是最节省资源的,基本上AssetBundle本身不占什么内存,只需要Asset对象的内存。可惜只能在PC/MacStandalone程序中使用。
CreateFromMemory和www.assetBundle:这两种方式AssetBundle文件会整个镜像于内存中,理论上文件多大就需要多大的内存,之后Load时还要占用额外内存去生成Asset对象。
4.建议unity所有的资源命名的时候用小写,下划线,数字,尽量不要用大写
5. www下载注意事项
privateIEnumerator DownLoad(string url, HandleFinishDownload finishFun)
{
WWW www = new WWW(url); //此处url 文件要完整的后缀,比如:model.unity或xml.txt,否则//找不到下载文件会出现cont open file
www.threadPriority= ThreadPriority.High;
//WWW www = WWW.LoadFromCacheOrDownload(url, -1);
if(url.Contains("jpg"))
{
Debug.Log("jpg!");
}
yieldreturnwww; //要返回www,否则www保存不到内存中
if(!string.IsNullOrEmpty(www.error))
{
Debug.LogError("www.error is "+ www.error);
yieldbreak;
}
if(finishFun != null) //yield return www 是同步方法,www下载完毕后会执行到此!
{
finishFun(www);
}
//如果www完成且,down的下载次数与总任务相同,则开始使用board中的图片替换场景中同名model的贴图
if(www.isDone && downNum == NeedDownFiles.Count)
{
boardAllTextureLoadA(); //此时并没有完成
}
www.Dispose();
}
5.
A.在是用uinty5.0进行.unity3D包发布的时候,会将该包的hash数据同时生成,在客户端加载的时候可以根据hash值来进行增量式热跟新。
B. 在客户端进行加载的时候,要读取asset打包时生成的window文件(切记不是window.Manifest文件),然后根据每个unity3D包的hash值进行热跟新
6. IIS上搭建下载文件夹的时候要加入crossdomain.xml文件:
相关网盘免费资源下载...