Unity c#改变材质的不透明度

问题描述 投票:0回答:1

我有一些代码,我通过代码生成两个自定义材料,如下所示:

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的Mesh Renderer组件)。

我尝试通过以下方式执行此操作:

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)

我该怎么做呢?我目前做错了什么?

如果有什么不清楚让我知道所以我可以澄清。

c# unity3d opacity
1个回答
0
投票

所以经过长时间的搜索和尝试,我弄清楚问题是什么。

我正在使用以下纹理类型创建材质:

不亮/透明

虽然名称甚至表明它支持透明度,但它只是在你使用具有透明度的.img文件时才这样做。当您想要更改整个对象的不透明度时,它不起作用。

不亮/色

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

所以我检查所有当前的着色器,它们都不支持改变'网格'/材料的整体不透明度。

所以如何做到这一点你可能会问。统一使用遗留着色器的以下着色器:Shader.Find("Legacy Shaders/Transparent/Diffuse")或透明类别中的任何其他着色器。

希望这有助于任何人!

© www.soinside.com 2019 - 2024. All rights reserved.