首页 > 解决方案 > 在 MeshRenderer.materials 中更改一种材质并且不实例化所有材质

问题描述

我需要更改,因此只在材料数组中实例化一种材料。目前,如果我访问MeshRenderer.materials,unity 会返回一组实例化材料。

此函数自动实例化材质并使它们对于此渲染器是唯一的。(文档

关于如何实现这一目标的任何想法?

有关我正在尝试做的事情的更多信息:

我有一个在场景中经常使用的带有 10 个材质槽的对象。

前 5 个插槽使用 Material-A,它使用 GPU 实例化,颜色作为实例化属性,后 5 个插槽使用 Material-B,它不使用 GPU 实例化,并且在运行时分配其纹理。

因此,当在运行时将纹理分配给后 5 个插槽时,它会破坏 GPU 实例化前 5 个插槽的目的。

除了使用 Texture2DArray 的 GPU Instance Material-B 之外,还有其他方法吗?

标签: unity3d

解决方案


"Material-A"每当我更改 Material-B 的纹理时,通过将其名称中包含的材质替换Resources.Load("Material-A") as Material为引用原始 Material-A 来解决此问题。

var mats = meshRenderer.materials;
mats[materialIndex].mainTexture = texture;
for (var i = 0; i < mats.Length; i++)
    if (mats[i].name == "Material-A (Instance)")
        mats[i] = Resources.Load("Material-A") as Material;
meshRenderer.materials = mats;

如果您有更好的方法,我将不胜感激...


推荐阅读