首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么当我访问渲染器时批数会增加?

为什么当我访问渲染器时批数会增加?
EN

Stack Overflow用户
提问于 2015-12-12 14:46:54
回答 2查看 969关注 0票数 0

我的场景里有81个游戏对象。当我玩的时候,数据是健康的,三批跑。但是,当我访问脚本中的呈现器时,每个对象的批数都会增加。在我访问了所有对象的渲染器之后,情况就变得糟糕了。

以前:批次:3份被批次保存: 80份FPS:近400份 之后:批处理:83个通过批处理保存:0\ FPS:大约200

代码:transform.GetComponent<Renderer>().material.color = Color32.Lerp(start_color, target_color,t);

我觉得这个问题是有道理的。“为什么在访问对象呈现器之前,Unity3D没有花费一个批处理?为什么即使在我完成了游戏对象的工作之后,批计数仍然是活动的?”

更新: 1.即使我只是简单地访问渲染器而不更改它,它也要花费一批,而且它永远不会减少。

代码语言:javascript
运行
复制
start_color = transform.GetComponent<Renderer>().material.color;
  1. 我通过lerp改变颜色来缩放物体。在检验员中,材料被重命名为mat(实例)。
  2. 我试过使用sharedMaterial。现在批次计数稳定为3,但所有81个对象都更改为相同的颜色。故事: 81可以更新到低,中等,高状态与不同的灰色阴影。我需要分组他们分类时,更新。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-12 15:05:39

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

票数 1
EN

Stack Overflow用户

发布于 2015-12-12 17:05:31

@VladislavKurenkov是对的。还有另一个窍门,但它并不适用于所有场景--它不是通过GetComponent().material引用材料,而是让一个 material 类型的公共变量。然后在该变量上修改您想要的任何内容,那么所有的转换都会受到影响。把你的资产中的一种材料输入检验员槽。这将节省批处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34241118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档