我有一些代码,其中我通过如下代码生成两个自定义材质:
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)
我将如何去做?我目前在做什么错?
如果不清楚,请告诉我,以便我澄清。
答案 0 :(得分:0)
因此,经过长时间的搜索和尝试,我发现了问题所在。
我正在创建具有以下纹理类型的材料:
不亮/透明
即使该名称甚至暗示它支持透明性,也可以这样做,但仅当您使用具有透明性的.img
文件时才这样做。当您要更改整个对象的不透明度时,它不起作用。
不亮/彩色
我对这种纹理类型有同样的问题,因为它的颜色属性具有不透明度值,因此不会影响整个网格。
因此,我统一检查所有当前着色器,它们都不支持更改“网格” /材质的总体不透明度。
那么您可能会问如何做。统一使用旧式着色器的以下着色器:Shader.Find("Legacy Shaders/Transparent/Diffuse")
或“透明”类别中的任何其他着色器。
希望这对任何人都有帮助!