资源打包:
1 BuildPipeline.BuildAssetBundles
2 填写unity右下角的assetbunldeName 和 assetbundleVariant
填写好name后直接调用api实现打包
增量式打包,只打包改变了的东西
tips:assetbundleName必须要小写,可以带后缀,脚本不能用

buildassetbundleoptions的各种选择
处理assets的依赖不再使用pop和push,打包的时候其中一个更改,不再需要打包整个依赖链

manifest包含crc,所包含的asset,依赖的assetbundle
manifestBundle = www.assetBundle;
AssetBundleManifest manifest = (AssetBundleManifest)manifestBundle.LoadAsset("AssetBundleManifest");
manifest.GetAllAssetBundles()

=============下载assetbundle
使用非缓存机制
WWW www = new WWW(RUL)
使用缓存机制(下载的assetbundle会根据版本号判断是否下载过)
WWW www = WWW.LoadFromCacheOrDownload(RUL)

 =============加载assetbundle
1使用www直接获取assetbundle
2assetbundle.createFromFile(filePath) 仅支持非压缩格式的assetbundle
3assetbundle.createfrommemory (byte[] binary)
即www获取www.byte 然后解密然后通过createfrommemory获得assetbundleCreateRequest,和as
4assetbundle.createfrommemoryimmediate(byte[] binary)
和3的区别 ,4 是直接返回assetbundle

 先加载含有manifest 的assetbundle,然后在里面的找到要依赖的assetbundle然后加载

=============从普通assetbundle加载asset
assetbundle.loadAsset
assetbundle.loadassetasync
assetbundle.loadall
assetbundle.loadallasync
assetbundle.loadallassetwithsubassets
assetbundle.loadallassetwithsubassetsasync
带async的返回assetbundlerequest,用
assetbundlerequest.asset获取gameobject,不带的直接返回gameobject
 
=============从场景assetbundle里面加载asset
application.loadlevel
application.loadlevelasync
application.loadleveladditive
application.loadleveladditiveasync

=============assetbundle variant的使用
1使用ui设置
2使用assetimporter.assetbundlevariant
3使用assetbundlebuild.assetbundlevariant

===========卸载assetbundle 
assetbundle.unload( )  
true把assetbundle生成出来的asset也删  false则不删
 

===========内存示意图

gameobject
----------------instantiate      -----destroy
audio,animation
----------------load               -----resource.unloadasset   or  resource.unloadunusedasset  or   as.unload(true)
www.assetbundle             
----------------  映射            ------as.unload(false) or as .unload(true)
解压后的assetbundle
解压需要的buffer
加压前的assetbundle
---------------
yield return      ------www=null or www.dipose
www实例 


=========web stream

www->web stream <- assetbundle -> asset

当web stream引用为0,web stream会自动清除
 web stream才是真正的内容,www和as只是对他引用

=====================
assetBundles sum


new www 获得www实例
yield return 后 获得 assetbundle里面文件的镜像
assetbundle.load  获得 asset  文件


instantiate 一个gameobject的时候
会复制 gameobject 文件
会引用 shader 文件
会复制+引用 网格
会复制+引用 材质
会引用 贴图


一个gameobject有  meshfilter 和 meshrender

gameobject 是复制

网格是复制+引用
材质球复制+引用

材质球里面的 shader 和 贴图 是引用


meshfilter就是网格 包含着 顶点信息和uv坐标
meshrender里面有材质球,shader 根据网格信息  对物体的顶点修改 和 用贴图上色




材质 Material包含贴图 Map,贴图包含纹理 Texture。

纹理是最基本的数据输入单位,游戏领域基本上都用的是位图。此外还有程序化生成的纹理 Procedural Texture。

贴图的英语 Map 其实包含了另一层含义就是“映射”。其功能就是把纹理通过 UV 坐标映射到3D 物体表面。

贴图包含了除了纹理以外其他很多信息,比方说 UV 坐标、贴图输入输出控制等等。

材质是一个数据集,主要功能就是给渲染器提供数据和光照算法。

贴图就是其中数据的一部分,根据用途不同,贴图也会被分成不同的类型,比方说 Diffuse Map,Specular Map,Normal Map 和 Gloss Map 等等。

另外一个重要部分就是光照模型 Shader ,用以实现不同的渲染效果。







相关文章: