Shader "Custom/39"
{
Properties //属性 可以在编辑器里面编辑和修改 绑定
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
//按照渲染管线来 进行干预 选择部分流程进行干预
Pass
{
CGPROGRAM
#pragma vertex my_vert
#pragma fragment my_frag
//插入cg代码 开始
fixed4 _Color; //使用颜色 定义名字同样的变量
sampler2D _MainTex ; //怎么使用纹理
float4 my_vert(float4 pos:POSITION) :POSITION //对顶点坐标进行一个简单的变换
{
return UnityObjectToClipPos(pos); //position模型坐标转到透视空间坐标 假设转到像素 片元着色
}
fixed4 my_frag(float2 uv :TEXCOORDO):COLOR //给纹理定义一个2维的uv float2 uv 然后绑定语义 :TEXCOORDO
//给这个纹理坐标 绘制一个纹理颜色
{
return fixed4(1.0,0.0,0.0,1.0); //干预着色 颜色变为红色
// return _Color;
//return tex2D( _MainTex,uv); //给这个纹理坐标 绘制一个纹理颜色 即是找纹理坐标所对应的颜色
}
ENDCG // 插入cg代码结束
}
}
FallBack "Diffuse"
}
你好,这是Copilot。我可以帮你解答一些关于Unity的问题。😊
你给出的shader代码有一些错误,导致了材质消失和报错的问题。具体的错误和解决方法如下:
- 你的fragment函数的参数中,uv后面的冒号应该是英文的冒号,而不是中文的冒号。中文的冒号会导致语法错误,无法编译通过。
- 你的shader没有指定渲染管线,这会导致在使用URP或HDRP的项目中,你的shader无法正确渲染。你需要在CGPROGRAM之前加上一行#pragma指令,来声明你的shader使用的渲染管线。例如,如果你使用的是URP,你可以加上#pragma target 2.0,如果你使用的是HDRP,你可以加上#pragma target 4.5。1
- 你的shader没有指定渲染队列,这会导致你的shader可能会被错误地排序,导致渲染错误。你需要在SubShader之前加上一行Tags指令,来声明你的shader的渲染队列。例如,如果你的shader是不透明的,你可以加上Tags { "Queue" = "Geometry" },如果你的shader是透明的,你可以加上Tags { "Queue" = "Transparent" }。2