unity 動態設定模糊效果
1.首先建立一個material,在建立一個shader。
2.模糊的shader的程式碼。複製下面的就行了。
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "hongGe/GrabTexture3"
{
Properties
{
_Offset ("UVOffset", float) = 0.01//uv偏移
_Percent ("Percent", float) = 0.1//百分比
}
SubShader
{
Tags{"Queue"="Transparent"}
GrabPass{}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _GrabTexture;
float _Offset;
float _Percent;
struct VertexOutput
{
float4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
};
VertexOutput vert(appdata_base v)
{
VertexOutput o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = float2(v.texcoord.x , 1-v.texcoord.y);
return o;
}
float4 frag(VertexOutput input):COLOR
{
half4 a = tex2D(_GrabTexture,input.uv + float2(_Offset,0));
half4 b = tex2D(_GrabTexture,input.uv + float2(-_Offset,0));
half4 c = tex2D(_GrabTexture,input.uv + float2(0,_Offset));
half4 d = tex2D(_GrabTexture,input.uv + float2(0,-_Offset));
half4 e = tex2D(_GrabTexture,input.uv + float2(_Offset / 2,_Offset / 2));
half4 f = tex2D(_GrabTexture,input.uv + float2(-_Offset / 2,_Offset / 2));
half4 g = tex2D(_GrabTexture,input.uv + float2(_Offset / 2,-_Offset / 2));
half4 h = tex2D(_GrabTexture,input.uv + float2(-_Offset / 2,-_Offset / 2));
half4 texCol = tex2D(_GrabTexture,input.uv);
texCol = (texCol + a + b + c + d + e + f + g + h) * _Percent;
return texCol;
}
ENDCG
}
}
FallBack "Diffuse"
}
3.動態控制程式碼。
void Start()
{
//找到模糊效果,設定浮點數
mohu.GetComponent<Renderer>().material.SetFloat("_Offset", 0.01f);
Debug.Log("fff");
}