本文实例为大家分享了统一材质实现自由放大缩小效果的具体代码,供大家参考,具体内容如下
代码:
以下实现的材质代码:
材质“隐藏/波” { 属性 { _MainTex(“纹理”,2 d)=鞍咨眥} _WaveWidth(“波宽度”,浮动)=0.5 _CenterX (“CenterX”,浮动)=0.5 _CenterY (“CenterY”,浮动)=0.5 } SubShader {//不扑杀或深度 剔除掉ZWrite中兴总是 通过 { CGPROGRAM # pragma顶点绿色 # pragma片段的破片 # include“UnityCG.cginc” struct appdata { float4顶点:位置; float2紫外线:TEXCOORD0; }; struct v2f { float2紫外线:TEXCOORD0; float4顶点:SV_POSITION; }; 浮动_WaveWidth; 浮动_CenterX; 浮动_CenterY; v2f绿色(appdata v) { v2f o; o。顶点=UnityObjectToClipPos (v.vertex); o。紫外线=v.uv; 返回啊; } sampler2D _MainTex; fixed4碎片弹(v2f我):SV_Target { float2中心=float2 (_CenterX _CenterY); float2距离=中心- i.uv; 浮动x=中心。x + center.x * (-distance.x/center.x) * (1 -_WaveWidth); 浮动y=中心。y + center.y * (-distance.y/center.y) * (1 -_WaveWidth); float2紫外线=float2 (x, y); 返回tex2D (_MainTex、紫外线); } ENDCG } } }
主要的内容还是在中干掉。
下面是挂在摄像机上的脚本:
使用System.Collections; 使用System.Collections.Generic; 使用UnityEngine; 公共类WaveCreame: MonoBehaviour { 公共材质waveShader=零; (范围(0.0 f, 1 f)) 公共浮动waveWidth f=0.3; 私人材料m_WaveMaterial=零; 私人浮动m_CenterX f=0.5; 私人浮动m_CtenterY f=0.5;//用它来初始化 无效的Start () { m_WaveMaterial=新材料(waveShader); }//更新每帧被称为一次 无效的更新(){ Vector3 pos=Input.mousePosition; m_CenterX=pos.x/回答; m_CtenterY=pos.y/Screen.height; 如果(Input.GetMouseButton (0)) { waveWidth +=Time.deltaTime * 0.5 f; } 如果(Input.GetMouseButton (1)) { waveWidth - f=Time.deltaTime * 0.5; } } 私人空间OnRenderImage (RenderTexture来源,RenderTexture目的地) { 如果(waveShader==null | | m_WaveMaterial==null)返回; m_WaveMaterial。SetFloat (“_WaveWidth”, waveWidth); m_WaveMaterial。SetFloat (“_CenterX”, m_CenterX); m_WaveMaterial。SetFloat (“_CenterY”, m_CtenterY); 图形。位块传输(来源、目的地、m_WaveMaterial); } } >之前以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
统一材质实现自由放大缩小效果