- Unity material的get. / set
material的get方法里面,会判断_material跟_sharedMaterial是否相同,如果相同,返回_material,如果不同,会新建一个_sharedMaterial的拷贝,并赋值给_material和_sharedMaterial。
material的set方法里面会把传入的值赋给_sharedMaterial,并且会再新建一个_sharedMaterial的拷贝,并赋值给_material。(因为值不同,所以get的时候又会新建一个Material。)
- public Material material {
- get {
- if (_sharedMaterial == _material) {
- return _material;
- }
- _material = new Material (_sharedMaterial);
_sharedMaterial = _material;
- return _material;
- }
- set {
- _sharedMaterial = value;
- _material = new Material (_sharedMaterial);
- }
- }
Get的时候保证以Share为准 所以如果两者不相等 new一份share出来 赋值给mat和share 保证两者相同
Set的时候保证share为准,优先设置share,然后new一份出来设置给mat,保证两者不想同
- OpenGL ES 3.0 带来很多新特性
1、支持更多缓冲区对象。在 OpenGL ES 2.0 时中,缓冲区对象的规范有模糊之处。名字一样缓冲区对象,在实际渲染中对表现却有细微的差别。针对这个问题 OpenGL ES 3.0 制定了更详细对格式规范。新版 OpenGl ES 还增加对 Uniform Buffer Object 的支持。
2、新版 GLSL ES 3.0 着色语言,支持 32 位整数和浮点数据类型以及操作。之前版本的着色语言只支持精度更低的,这样虽然能够加快计算的速度,所需的资源也更少,但当着色器的复杂度增加,出错也随之增加。同时,新版着色语言的语法更贴近 GLSL。
3、支持遮挡查询(Occlusion Query)以及几何体实例化(Geometry Instancing)。通过遮挡查询,能够让 GPU 知道 3D 场景中,哪些物体被其它物体完全遮挡,这些完全被遮挡的物体 GPU 不会去渲染。几何体实例化是通过对具有相同顶点数据的几何体,赋予不同的空间位置、颜色或纹理等特征,从而创造出不同实例对象的技术。这两个特性都能够节省硬件资源,提高 3D 图形渲染的性能。
4、增加多个纹理的支持。包括浮点纹理、深度纹理、顶点纹理等等。
5、多重渲染目标(Multiple Render Targets),让GPU 一次性渲染多个纹理。
6、多重采样抗锯齿(MSAA Render To Texture),让 3D 物体对边缘不出现毛刺,可提升图像效果。
7、使用统一的纹理压缩格式 ETC:多年来阻碍 OpenGL 发展的一大顽疾,就是没有统一的纹理压缩格式,包括 S3TC、GPUs、PVPRTC、ETC 等等。因为没有一个统一标准,开发者不得不因为不同的硬件环境而将纹理重复压缩多次——尤其对于 Android 开发者而言,这个过程苦不堪言(对用户来说也有大量的烦恼,比如安装游戏数据包时需要自己来识别需要哪种材质的数据包)。显然,统一纹理压缩格式,能够提高开发者对开发效率。但现实中,统一标准这类事情的进展从来没有快过。这视乎之后开发者与厂商会做出怎样的反应。Android 4.3 升级到 Open GL ES 无疑是一个好的开始,OpenGL ES 3.0 大量的新特性完全加持,将大幅提高移动平台图形特性,提高游戏图形效果。
- NGUI的dynamicMat
NGUI的dynamicMat 是DrawCall绘制时使用的材质实例,但是会在重建DrawCall的时候被重新赋值,所以如果你希望动态设置UItexture的材质以及参数,那将会很不稳定。
解决方案 是UItexture单独放在一个panel下,避免DC重建将材质参数重新赋值
- AB疑问:
文件夹的AB名,决定路径下边所有资源都被打进去么 ? 文件夹的AB名字保证文件夹下没有设置AB名的资源被打进一个AB包。
非resource下的文件,没有引用但设置了ab名字,会被自动打包进去? 是的
AB规则。 Resource下强制打包-> 依赖关系->ab名字 是的
- Unity的一种变态异常
Unity极少情况下,导入资源未触发资源reimport,ab名字未刷新,导致打包后按照错误的AB名字加载资源,造成闪退
- AssetBundle 压缩格式:
BuildAssetBundleOptions.None 默认lama压缩格式,是一种默认的压缩形式,这种标准压缩格式是一个单一LZMA流序列化数据文件,并且在使用前需要解压缩整个包体。LZMA压缩是比较流行的压缩格式,能使压缩后文件达到最小,但是解压相对缓慢,导致加载时需要较长的解压时间
BuildAssetBundleOptions.UncompressedAssetBundle
不压缩的方式,打包后包体会很大,,导致很占用空间,但是一旦下载Assetbundle,访问非常快。不推荐这种方式打包,因为现在的加载功能做的很友好了,完全可以用加载界面来进行后台加载资源,而且时间也不长
BuildAssetBundleOptions.ChunkBasedCompression
LZ4压缩格式,Unity支持LZ4压缩,能使得压缩量更大,而且在使用资源包前不需要解压整个包体。LZ4压缩是一种“Chunk-based”算法,因此当对象从LZ4压缩包中加载时,只有这个对象的对应模块被解压即可,这速度更快,意味着不需要等待解压整个包体。LZ4压缩格式是在Unity5.3版本中开始引入的,之前的版本不可用