Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# unity着色器中的下标无效_C#_Visual Studio_Unity3d_Shader - Fatal编程技术网

C# unity着色器中的下标无效

C# unity着色器中的下标无效,c#,visual-studio,unity3d,shader,C#,Visual Studio,Unity3d,Shader,我对着色器编码相当陌生,但我通过将2个未发光着色器分组来实现这一点 当我尝试制作这个着色器时,它是为了创建一个轮廓并让我插值2个纹理,unity告诉我有一个错误:第61行的下标“vertex”无效 我试过一些方法,但我不能让这个着色器正常工作,如果有人知道我必须做什么,我会非常感激 Shader "Unlit/Combined" { Properties { _MainTex("Texture", 2D) = "white" {} _Seconda

我对着色器编码相当陌生,但我通过将2个未发光着色器分组来实现这一点 当我尝试制作这个着色器时,它是为了创建一个轮廓并让我插值2个纹理,unity告诉我有一个错误:第61行的下标“vertex”无效

我试过一些方法,但我不能让这个着色器正常工作,如果有人知道我必须做什么,我会非常感激

Shader "Unlit/Combined"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _SecondaryTex("Secondary Texture", 2D) = "white" {}
        _LerpValue("Transition float", Range(0,1)) = 0.5

        _OutlineColor("Outline color", color) = (0,0,0,1)
        _OutlineWidth("Outline width", Range(1.0,5.0)) = 1.01
    }





        SubShader
        {
            Tags { "RenderType" = "Opaque"  "Queue" = "Transparent"}
            LOD 100

            Pass
            {
                CGPROGRAM

                #pragma vertex vert
                #pragma fragment frag

                // make fog work
                #pragma multi_compile_fog

                #include "UnityCG.cginc"

                struct appdata
                {
                    //float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                    float3 normal : NORMAL;
                };

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    UNITY_FOG_COORDS(1)
                    float4 outvertex : SV_POSITION;
                    float4 pos : POSITION;
                    float3 normal : NORMAL;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                sampler2D _SecondaryTex;
                float4 _SecondaryTex_ST;
                float _LerpValue;
                float _OutlineWidth;
                float4 _OutlineColor;

                v2f vert(appdata v)
                {
                    v2f o;
                    v.vertex.xyz *= _OutlineWidth;
                    o.outvertex = UnityObjectToClipPos(v.vertex);
                    o.pos = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {
                    // sample the texture
                    fixed4 col = lerp(tex2D(_MainTex, i.uv),tex2D(_SecondaryTex, i.uv), _LerpValue);

                    return col;
                    return _OutlineColor;
                }

                ENDCG
            }


            Pass//Normal render
            {
                ZWrite On

                Material
                {
                    Diffuse[_Color]
                    Ambient[_Color]
                }

                Lighting On

                SetTexture[_MainTex]
                {
                    ConstantColor[_Color]
                }

                SetTexture[_MainTex]
                {
                    Combine previous * primary DOUBLE
                }

            }
        }
}

有问题的线路是第61行:

v.vertex.xyz *= _OutlineWidth;
如果查看
v
声明为的类型,则其声明为
appdata

v2f vert(appdata v)
struct appdata
{
    //float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : NORMAL;
};
如果查看
appdata
的定义:

v2f vert(appdata v)
struct appdata
{
    //float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : NORMAL;
};
您将看到它没有
vertex
属性,只有
uv
normal

因此,当您试图修改它的3值属性时(uv只有
xy
),问题所在的行应该更改为其中一行,可能是
normal

或者,您可以通过取消注释已注释掉的
顶点来修改
appdata
以具有顶点属性:

struct appdata
{
    float4 vertex : POSITION;
    float2 uv : TEXCOORD0;
    float3 normal : NORMAL;
};

或者通过删除第61行,根据您试图执行的操作。

取消注释时的问题是我有3个错误:输出语义
POSITION
和输出语义
SV\u POSITION
输入语义
SV\u POSITION
和输入语义
POSITION
输出语义
SV\u POSITION
和输出语义
POSITION
你说了三个错误,列出了6行,但没有说是哪一行。我列出了其中的3行;它们是复制的系统值:1:输出语义位置和输出语义SV_位置//2:输入语义SV_位置和输入语义位置//3:输出语义SV_位置和输出语义位置//行位于结构v2f上,在代码请求处我道歉,我看不懂你把它们贴在一起的样子。无论如何,注释掉第45行和第62行。您已经复制了输出顶点位置(这两个字段都被设置为相同的值,因此您不需要两个字段,这正是错误告诉您的:“复制的语义”)。