unity-game-engine - 如何在脚本中访问统一着色器属性?

标签 unity-game-engine shader

我想访问两个属性 _Color_Color2 并希望使用脚本更改这些值,因为我们可以看到该值的格式为 (1, 1,1,1) 那么我怎样才能改变它的基本颜色值。

Shader "Custom/SpriteGradient" 
{
    Properties
    {
        [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
        _Color("LeftColor", Color) = (1,1,1,1)
        _Color2("RightColor", Color) = (1,1,1,1)
        _Scale("Scale", Float) = 1

        _StencilComp("Stencil Comparison", Float) = 8
        _Stencil("Stencil ID", Float) = 0
        _StencilOp("Stencil Operation", Float) = 0
        _StencilWriteMask("Stencil Write Mask", Float) = 255
        _StencilReadMask("Stencil Read Mask", Float) = 255
        _ColorMask("Color Mask", Float) = 15
        // see for example
        // http://answers.unity3d.com/questions/980924/ui-mask-with-shader.html
    }

    ...
}

最佳答案

参见Material.SetColor

API 的修改示例

void Start()
{
    //Get the Renderer component from this object
    var renderer = GetComponent<Renderer>();

    var material = renderer.material;

    //Call SetColor using the shader property name "_Color" and "_Color2" and setting their color to red
    material.SetColor("_Color", Color.red);
    material.SetColor("_Color2", new Color(1, 0, 0, 1));  
}

名称表示实际的属性名称,而不是显示名称。您还可以获得实际的属性名称,例如通过选择着色器资源并检查检查器

关于unity-game-engine - 如何在脚本中访问统一着色器属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004238/

相关文章:

android - Unity3D - 多个 dex 文件定义了为 android (Firebase) 构建时的异常

opengl - 在OpenGL中使用间接渲染有什么好处?

c# - 如果 if 的 bool 参数之一为 null,为什么 else 语句不会被执行?

c# - 将基类属性重写为派生类型并通过基类访问

c# - 使用 NavMesh 寻找距离较近的玩家

ios - swift/ SpriteKit : How to create a water drop effect?

android - 将自定义属性传递给自定义 fragment 着色器

OpenGL 着色语言向后兼容性

opengl - 来自高度图工件的法线贴图

java - 如何创建一个简单/空的 Java 库项目来编译为 Unity 的 Android 服务?