unity 5.6.6f1
在做性能优化时,发现Shader在每次加载使用了Shader的Prefab资源的时候都会调用Shader.Parse,Shader.CreateGPUProgram两个函数,这个函数的调用消耗了大量的CPU性能。这里写个demo测试下,测试的demo创建了几个prefab,每个Prefab都挂在material,然后没隔0.5s执行一次随机创建一个prefab,再隔0.5s销毁,依次重复。主要如下:
unity 5.6.6f1
在做性能优化时,发现Shader在每次加载使用了Shader的Prefab资源的时候都会调用Shader.Parse,Shader.CreateGPUProgram两个函数,这个函数的调用消耗了大量的CPU性能。这里写个demo测试下,测试的demo创建了几个prefab,每个Prefab都挂在material,然后没隔0.5s执行一次随机创建一个prefab,再隔0.5s销毁,依次重复。主要如下:
unity 5.6.6f1
再检查项目的内存问题时发现Lightmap的加载会消耗大量堆内存(高达17M,总共差不多35张lightmap贴图)。抛开lightmap的资源内存分配理论上不应该消耗堆内存才对,查看加载的代码最终发现了问题。
unity 5.6.6f1
在游戏中角色的两个动作直接切换过度效果上,如果两个动作没有很好的衔接会出现一定程度上的僵硬现象。这种情况可以用BlendTree来进行融合。比如这样:
这里配置了三个Motion动作,三个动作之间的切换利用Controller的Parameter来控制,这个Parameter同时可作为BlendTree的Thresholds。Thresholds是用来配置各个Motion的触发条件的。
unity 5.6.6f1
深度值是对象距离摄像机距离的一个参考值,在制作一些场景效果时会经常用得到。深度值是在顶点着色器之后的像素着色器之前的深度测试阶段生成的,所以获取深度值就得在像素着色器中获取。下面创建了一个简单的场景来显示深度信息
unity 4.7.1f1
MemoryPool主要是对内存分配的碎片化和频繁分配和释放进行优化。
结构
MemoryPool的设计结构如下:
1 |
|