在子着色器中的通道里面命名一个相同变量名的对应类型,然后如果修改的是坐标等顶点着色器中的属性,就在顶点着色器的编程中返回,如果是颜色等像素着色器中的属性就在片元着色器中返回相应的值。
例如
Shader "Custom/My_shader2"
{
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//开始插入Cg代码
#pragma fragment my_frag
fixed4 my_frag():COLOR
{
return fixed4(1.0,0.0,0.0,1.0);
}
}
ENDCG
}
FallBack "Diffuse"
}
动态修改shader的颜色
新创建一个c#脚本文件
public class My_shader : MonoBehaviour
{
public Material my_shader;//声明着色器
// Start is called before the first frame update
void Start()
{
my_shader.SetColor("_Color", new Color(0.5f, 0.6f, 0.7f, 1.0f));
}
// Update is called once per frame
void Update()
{
}
}
可以在开始函数中修改也可以在更新函数中修改。
修改纹理
fixed4 my_frag(float2 uv:TEXCOORD0) :COLOR//第一套纹理也可以是第二套第三套,只需要将最后面的0修改成1-3即可
{
return tex2D(_MainTex,uv);//前面是需要修改的纹理,后面是查找的像素坐标颜色
}
先获取纹理坐标然后通过tex2D函数修改即可。
基本知识可去https://blog.csdn.net/lfanyize/article/details/104087184