我制作了一个脚本,将所有材料从游戏对象复制到另一个。它是一个在编辑器中运行以按下按钮的脚本。
TargetComponents[j].gameObject.transform.GetComponent<Renderer>().material=ComponentsToAdd[i].gameObject.transform.GetComponent<Renderer>().materials;
是一个Unity 5脚本,但在统一4中是相同的,它没什么区别,比如:
TargetComponents[j].gameObject.transform.render.materials=ComponentsToAdd[i].gameObject.transform.render.materials;
可以使用,但我复制的材料不一样,但实例。 我想知道如何告诉他不要创建实例,而是在资产中使用原始材料。
有可能吗?
答案 0 :(得分:1)
Unity提供了两种获取渲染器材质的方法:
sharedMaterial
属性将返回原始素材资源。这就是你想要的,这里。
material
属性将在内部复制共享材料,将其分配给渲染器,然后返回新副本。这通常是“安全”的事情,特别是对于那些可能不了解这种区别的经验不足的开发人员,但它几乎从来都不是编辑器脚本的正确举措。
渲染器还会公开materials
和sharedMaterials
数组,以防您在一个对象上有多个材质。
您可能已经知道这一点,但要小心编辑共享材料,因为它在所有渲染器和引用该材质的资产之间共享。