【问题标题】:Unity c# change opacity of the materialunity c# 改变材质的不透明度
【发布时间】:2019-01-02 11:58:05
【问题描述】:

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

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);

不,我想在运行时更改这些材质的不透明度。 (同时,材质已应用于生成的游戏对象的 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)

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

如果有任何不清楚的地方,请告诉我,以便我澄清。

【问题讨论】:

  • 所以当您使用 material.color 时会出现该错误?
  • 是的,因为当我调用更新它的函数时,我得到了错误
  • 好的,但是当你打电话给m.SetColor("_Color", c); 时不行你能告诉我们完整的错误吗?
  • 是的,我会更新问题

标签: c# unity3d opacity


【解决方案1】:

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

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

不亮/透明

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

不亮/彩色

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-12-18
    • 1970-01-01
    • 2015-02-16
    • 2022-01-24
    • 2016-03-01
    • 2015-03-04
    • 2018-02-15
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多