我的场景里有81个游戏对象。当我玩的时候,数据是健康的,三批跑。但是,当我访问脚本中的呈现器时,每个对象的批数都会增加。在我访问了所有对象的渲染器之后,情况就变得糟糕了。
以前:批次:3份被批次保存: 80份FPS:近400份 之后:批处理:83个通过批处理保存:0\ FPS:大约200
代码:transform.GetComponent<Renderer>().material.color = Color32.Lerp(start_color, target_color,t);
我觉得这个问题是有道理的。“为什么在访问对象呈现器之前,Unity3D没有花费一个批处理?为什么即使在我完成了游戏对象的工作之后,批计数仍然是活动的?”
更新: 1.即使我只是简单地访问渲染器而不更改它,它也要花费一批,而且它永远不会减少。
start_color = transform.GetComponent<Renderer>().material.color;发布于 2015-12-12 15:05:39
每次您更改材料的任何属性时,它都会创建该材料的实例。这就是为什么不通过批处理保存对象的原因。
发布于 2015-12-12 17:05:31
@VladislavKurenkov是对的。还有另一个窍门,但它并不适用于所有场景--它不是通过GetComponent().material引用材料,而是让一个 material 类型的公共变量。然后在该变量上修改您想要的任何内容,那么所有的转换都会受到影响。把你的资产中的一种材料输入检验员槽。这将节省批处理。
https://stackoverflow.com/questions/34241118
复制相似问题