为什么在访问渲染器时批量计数会增加?

时间:2015-12-12 14:46:54

标签: unity3d profiler renderer batching

我的场景中有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;
  1. 我通过lerp改变颜色来缩放对象。在检查器中,材质被重命名为mat(实例)。

  2. 我尝试过使用sharedMaterial。现在批次计数稳定为3,但所有81个对象都变为相同的颜色。 故事:81可以更新为具有不同灰色阴影的低,中,高状态。我需要在更新后对它们进行分类。

2 个答案:

答案 0 :(得分:1)

每当您更改材质的任何属性时,它都会创建材质的实例。这就是为什么您的对象不能通过批处理保存的原因。

答案 1 :(得分:1)

@VladislavKurenkov是对的。还有另一个技巧,但它不适用于所有场景 - 而不是通过 GetComponent()。材料引用材料,只需创建一个材料类型的公共变量。然后在该变量上修改您想要的任何内容,所有变换都会受到影响。只需将资产中的资料输入检查器插槽即可。这样可以节省批次。