Unity服务器热更新项目总结

相关网盘免费资源下载...

 

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.251),因此加载完 Object 后,webstream需要及时释放

 

Ø        几种AssetBundle创建方式的差异:
CreateFromFile:这种方式不会把整个硬盘AssetBundle文件都加载到内存来,而是类似建立一个文件操作句柄和缓冲区,需要时才实时Load,所以这种加载方式是最节省资源的,基本上AssetBundle本身不占什么内存,只需要Asset对象的内存。可惜只能在PC/MacStandalone程序中使用。
CreateFromMemorywww.assetBundle:这两种方式AssetBundle文件会整个镜像于内存中,理论上文件多大就需要多大的内存,之后Load时还要占用额外内存去生成Asset对象

 

4.建议unity所有的资源命名的时候用小写,下划线,数字,尽量不要用大写

5. www下载注意事项

    privateIEnumerator DownLoad(string url, HandleFinishDownload finishFun)

    {

        WWW www = new WWW(url);  //此处url 文件要完整的后缀,比如:model.unityxml.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文件:

 

 

 

 

相关网盘免费资源下载...

你可能感兴趣的:(Unity3D开发)