着色器:基于纹理坐标的颜色更改滑块

时间:2019-10-18 18:42:38

标签: user-interface unity3d shader

我尝试为Unity的滑块填充重新着色,以使其显示具有不同颜色的劳动力组成的子组。不幸的是,比率没有正确显示,或者根本无法改变颜色。

使用常量值,比率通常是错误的,尝试使用我的float数组,颜色通常甚至都不会改变。

            uint _SegmentsSize = 0;
            float _Segments[1000];
            uint current = 0;

            fixed4 frag(v2f IN) : SV_Target
            {
                current = 0;
                for (int i = 0; i < _SegmentsSize; i++)
                {
                    if (IN.texcoord.x > _Segments[i]) {
                        current = i+1;
                    }
                }




                fixed4 co = fixed4((current) % 3 == 0 ? 1 : 0, (current + 1) % 3 == 0 ? 1 : 0, (current + 2) % 3 == 0 ? 1 : 0, 1);
                half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color* co;

                #ifdef UNITY_UI_CLIP_RECT
                color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
                #endif

                #ifdef UNITY_UI_ALPHACLIP
                clip(color.a - 0.001);
                #endif

                return color;
            }

在C#一侧(垫子是一种材料)

    mat.SetInt("current", segments.Length);
    mat.SetFloatArray("_Segments", segments);

0 个答案:

没有答案