我的场景中有81个游戏对象。当我玩3个批次时,数据是健康的。但是当我在脚本中访问渲染器时,每个对象的批次计数都会增加。在我访问了所有对象的渲染器后,情况变得糟糕。
之前:批次: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;
我通过lerp改变颜色来缩放对象。在检查器中,材质被重命名为mat(实例)。
我尝试过使用sharedMaterial。现在批次计数稳定为3,但所有81个对象都变为相同的颜色。 故事:81可以更新为具有不同灰色阴影的低,中,高状态。我需要在更新后对它们进行分类。
答案 0 :(得分:1)
每当您更改材质的任何属性时,它都会创建材质的实例。这就是为什么您的对象不能通过批处理保存的原因。
答案 1 :(得分:1)
@VladislavKurenkov是对的。还有另一个技巧,但它不适用于所有场景 - 而不是通过 GetComponent()。材料引用材料,只需创建一个材料类型的公共变量。然后在该变量上修改您想要的任何内容,所有变换都会受到影响。只需将资产中的资料输入检查器插槽即可。这样可以节省批次。