Unity3d 当我访问渲染器时,为什么批次计数会增加?

Unity3d 当我访问渲染器时,为什么批次计数会增加?,unity3d,profiler,renderer,batching,Unity3d,Profiler,Renderer,Batching,我的场景中有81个游戏对象。当我玩的统计是健康的3批运行。但当我访问脚本中的渲染器时,每个对象的批处理计数都会增加。在我访问了所有对象的渲染器之后,情况变得很糟糕 之前:批次:3 |通过批次保存:80 | FPS:近400 之后:批次:83 |通过批次保存:0 | FPS:约200 代码:transform.GetComponent().material.color=Color32.Lerp(开始颜色,目标颜色,t) 我认为这个问题有道理。“为什么Unity3D在访问渲染器之前不花费对象一个批次

我的场景中有81个游戏对象。当我玩的统计是健康的3批运行。但当我访问脚本中的渲染器时,每个对象的批处理计数都会增加。在我访问了所有对象的渲染器之后,情况变得很糟糕

之前:批次:3 |通过批次保存:80 | FPS:近400

之后:批次:83 |通过批次保存:0 | FPS:约200

代码:transform.GetComponent().material.color=Color32.Lerp(开始颜色,目标颜色,t)

我认为这个问题有道理。“为什么Unity3D在访问渲染器之前不花费对象一个批次?为什么即使在我处理游戏对象之后,批次计数仍然处于活动状态?”


更新: 1.即使我只是访问渲染器而不更改它,它也需要一批处理,而且永远不会减少

start_color = transform.GetComponent<Renderer>().material.color;
start\u color=transform.GetComponent().material.color;
  • 我通过lerp改变颜色来缩放对象。在检查器中,材质将重命名为mat(实例)

  • 我试着使用sharedMaterial。现在批次数稳定为3,但所有81个对象都变为相同的颜色。 故事:81可以用不同的灰色色调更新为低、中、高状态。我需要在更新时对它们进行分类


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

    @VladislavKurenkov是正确的。还有另一个技巧,但它不会在所有情况下都起作用-而不是通过GetComponent()引用材质。材质只需创建一个类型为material的公共变量即可。然后修改该变量上的任何内容,所有变换都将受到影响。只需将资源中的一个材料输入检查器插槽即可。这将保存批处理。

    我需要我的对象在三种状态之间保持更新。是否可以在三个共享材质之间对要使用的对象进行分组以实现3的批计数?@DistributionArrestor您可以尝试以下技巧:创建三种材质(针对您的状态),并在必要时进行切换。@DistributionArrestor我不相信这是您的情况。如果你想单独操纵不同的对象,你可能应该听从弗拉迪斯拉夫的建议。我发布了这篇文章,以便其他开发人员可能会发现它很有用,或者至少提供了一些信息。