Александр Ли Asked:2020-09-09 06:07:06 +0000 UTC2020-09-09 06:07:06 +0000 UTC 2020-09-09 06:07:06 +0000 UTC 如何更改具有共享材质的一组对象之一的颜色? 772 有 10 个立方体。在每个挂着相同的材料。是否可以更改单个立方体的颜色?现在材料的颜色发生了变化,所有的立方体都被重新绘制了。颜色将从代码中设置,我不知道将使用什么颜色,因此创建 10 种不同颜色的材料不是一种选择。 unity3d 1 个回答 Voted Best Answer user302909 2020-09-09T06:41:23Z2020-09-09T06:41:23Z 如果您不涉及 GPU 实例化的问题,那么仅在运行时创建新材质。 您可能熟悉Renderer.sharedMaterial和属性Renderer.material。 第一个选项返回一组对象共有的材质,更改会导致整个对象组的渲染发生变化 - 然后材质是通用的。 此对象的共享材质。 修改 sharedMaterial 将改变所有使用此材质的对象的外观,并更改存储在项目中的材质设置。 不建议修改 sharedMaterial 返回的材质。如果要修改渲染器的材质,请改用材质。 第二个选项也可以返回共享材质,但不同之处在于更改它会创建材质的副本。 返回分配给渲染器的第一个实例化材质。 修改材质只会更改此对象的材质。 如果该材质被任何其他渲染器使用,这将克隆 共享材质并从现在开始使用它。 // скопирует существующий материал и поменяет его цвет GetComponent<Renderer>().material.SetColor("_Color", Color.black); 小心 - 以这种方式生成新材料可能会在副本数量方面“失控”。此外,您可能会创建 2 种具有相同属性的不同材料。 这里有2个出口: 最好找一些经理来监控您创建的材料和数量,这样您就不会创建不必要的副本。 使用 GPU 实例化和属性块。
如果您不涉及 GPU 实例化的问题,那么仅在运行时创建新材质。
您可能熟悉
Renderer.sharedMaterial和属性Renderer.material。第一个选项返回一组对象共有的材质,更改会导致整个对象组的渲染发生变化 - 然后材质是通用的。
第二个选项也可以返回共享材质,但不同之处在于更改它会创建材质的副本。
小心 - 以这种方式生成新材料可能会在副本数量方面“失控”。此外,您可能会创建 2 种具有相同属性的不同材料。
这里有2个出口:
最好找一些经理来监控您创建的材料和数量,这样您就不会创建不必要的副本。
使用 GPU 实例化和属性块。