代码之家  ›  专栏  ›  技术社区  ›  RavioliDish

着色器没有纹理属性“\u MainTex”

  •  0
  • RavioliDish  · 技术社区  · 2 年前

    奇怪的是,我只运行了一次代码,它运行得很好。我得到错误的代码行是:

    exampleTexture = (Texture2D)rend.material.mainTexture;
    

    我知道我使用的自定义着色器有“mainTexture”以外的内容,它是沿着以下几行的:

    Properties
        {
            _Example ("Example (R16)", 2D) = "black" {}
            _Color ("Color", Color) = (1, 1, 1, 1)
        }
    

    第一次成功的时候我就被难住了,有什么想法吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   derHugo    2 年前

    如果你调查一下 Material.mainTexture 还有 source code

    • 要么你有一个属性为 [MainTexture]
    • 或者作为它正在寻找的后备方案 _MainTex .

    或者用API的话来说

    默认情况下,Unity考虑具有特性名称的纹理 "_MainTex" 成为主要纹理。使用 [主纹理] ShaderLab属性使Unity将具有不同属性名称的纹理视为主纹理。

    您可能需要重命名 Example

    _MainTex ("Example (R16)", 2D) = "black" {}
    

    或者如果你想/需要坚持这个名字 _Example 您需要添加提到的属性

     [MainTexture] _Example ("Example (R16)", 2D) = "black" {}
    

    或者,不要使用默认的属性访问器,而是使用更通用的属性访问器 Material.GetTexture

    exampleTexture = (Texture2D)rend.material.GetTexture("_Example");