Unity C#更改材质的不透明度

时间:2018-07-25 15:30:23

标签: c# unity3d opacity

我有一些代码,其中我通过如下代码生成两个自定义材质:

var m = new Material(Shader.Find("Unlit/Transparent"));
m.SetTexture("_MainTex", (Texture)Resources.Load("data/"+Path.GetFileNameWithoutExtension("data/"+DatabaseData.local_photo_name)));

和我生成的其他材料如下:

var c = new Color(255, 0, 255, 1); //just an example color... 
var m = new Material(Shader.Find("Unlit/Color"));
m.SetColor("_Color", c);

不,我想在运行时更改这些材料的反面性。 (同时,这些材料已应用于生成的GameObject的MeshRenderer组件)。

我试图通过以下方式做到这一点:

var RRenderer = InteractRecord.GetComponent<MeshRenderer>();
RRenderer.material.color = new Color(RRenderer.material.color.r, RRenderer.material.color.g, RRenderer.material.color.b, o);

但是当我这样做时,出现以下错误:

  

材料没有颜色属性“ _Color”   UnityEngine.Material:get_color()    DBRecord:SetRecordOpacity(Single,Boolean)(在Assets / scripts / DBRecord.cs:118)    Main:Update()(位于Assets / scripts / Main.cs:66)

我将如何去做?我目前在做什么错?

如果不清楚,请告诉我,以便我澄清。

1 个答案:

答案 0 :(得分:0)

因此,经过长时间的搜索和尝试,我发现了问题所在。

我正在创建具有以下纹理类型的材料:

  

不亮/透明

即使该名称甚至暗示它支持透明性,也可以这样做,但仅当您使用具有透明性的.img文件时才这样做。当您要更改整个对象的不透明度时,它不起作用。

  

不亮/彩色

我对这种纹理类型有同样的问题,因为它的颜色属性具有不透明度值,因此不会影响整个网格。

因此,我统一检查所有当前着色器,它们都不支持更改“网格” /材质的总体不透明度。

那么您可能会问如何做。统一使用旧式着色器的以下着色器:Shader.Find("Legacy Shaders/Transparent/Diffuse")或“透明”类别中的任何其他着色器。

希望这对任何人都有帮助!