【发布时间】:2020-10-12 23:15:45
【问题描述】:
我有一个名为Scanner 的脚本附加到gameobject 也称为Scanner。扫描仪对象有一个子对象 (GFX),它有 2 种材质,第一种材质称为(静态颜色),第二种材质称为(更改颜色)。
扫描仪脚本:
public ColorNameScript.ColorName scanColor;
public Material staticMat;
public MeshRenderer meshRenderer;
private void OnValidate()
{
if (meshRenderer != null && staticMat != null)
{
MaterialPropertyBlock block = new MaterialPropertyBlock();
block.SetColor("_Color", ColorNameScript.HueColourValue(scanColor));
meshRenderer.materials[1].color = block.GetColor("_Color");
Debug.Log("Color has changed");
}
else
{
Debug.Log("Missing files!");
}
}
ColorNameScript 只是我在网上找到的一个简单脚本,它可以帮助我通过枚举设置颜色。
public enum ColorName
{
Lime,
Green,
Aqua,
Blue,
Navy,
Purple,
Pink,
Red,
Orange,
Yellow
}
private static Hashtable hueColourValues = new Hashtable{
{ ColorName.Lime, new Color32( 166 , 254 , 0, 255 ) },
{ ColorName.Green, new Color32( 0 , 254 , 111, 255 ) },
{ ColorName.Aqua, new Color32( 0 , 201 , 254, 255) },
{ ColorName.Blue, new Color32( 0 , 122 , 254, 255 ) },
{ ColorName.Navy, new Color32( 60 , 0 , 254, 255 ) },
{ ColorName.Purple, new Color32( 143 , 0 , 254, 255 ) },
{ ColorName.Pink, new Color32( 232 , 0 , 254, 255 ) },
{ ColorName.Red, new Color32( 254 , 9 , 0, 255 ) },
{ ColorName.Orange, new Color32( 254 , 161 , 0, 255 ) },
{ ColorName.Yellow, new Color32( 254 , 224 , 0, 255 ) },
};
public static Color32 HueColourValue(ColorName color)
{
return (Color32)hueColourValues[color];
}
我的问题是:使用上面的扫描仪脚本会导致编辑器中出现材料泄漏错误(请参阅下面的图片链接),修复它的唯一方法是使用meshRenderer.sharedMaterial,这样就可以了很好,但这会将所有其他扫描仪的颜色更改为相同的颜色,我希望能够为每个扫描仪选择不同的颜色。我该怎么做?
【问题讨论】:
-
在编辑器环境中,您需要克隆材质,更改其颜色,并将其分配给渲染器。
-
@shingo 我试过了,但没用 => var newMat = new Material(staticMaterial);