Shader "Custom/test1" {
SubShader {
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"
float4x4 mvp;
float dir;
float r;
struct v2f{
float4 pos:POSITION;
fixed4 col:COLOR;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
//透视除法
o.pos.x = o.pos.x/o.pos.w;
o.pos.y = o.pos.y/o.pos.w;
//根据x的屏幕坐标设置颜色的变化
float X = o.pos.x;
if(X>dir&&X<dir+r)
o.col = float4(1,0,0,1);
else
o.col = float4(X/2+0.5,X/2+0.5,X/2+0.5,1);
return o;
}
fixed4 frag(v2f IN):COLOR
{
return IN.col;
}
ENDCG
}
}
}
using UnityEngine;
using System.Collections;
public class setFloat : MonoBehaviour {
private float dir=-1;
private float r=0.1f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
dir+=Time.deltaTime;
GetComponent<Renderer>().material.SetFloat("dir",dir);
GetComponent<Renderer>().material.SetFloat("r",r);
}
}
屏幕坐标设置颜色变化(根据透视x坐标实现一个红色光带)
最新推荐文章于 2025-01-04 14:45:16 发布
本文介绍了一个使用Unity Shader实现动态颜色变化的技术方案。通过调整Shader中的参数,可以实现在特定屏幕坐标区间内改变物体的颜色,展示了如何利用Cg语言编写顶点和片段着色器,并在运行时动态更新材质属性。
1402

被折叠的 条评论
为什么被折叠?



