统一材质实现自由放大缩小效果

  

本文实例为大家分享了统一材质实现自由放大缩小效果的具体代码,供大家参考,具体内容如下

  

统一材质实现自由放大缩小效果

  

代码:   

以下实现的材质代码:

        材质“隐藏/波”   {   属性   {   _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);   }   }      之前      

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

统一材质实现自由放大缩小效果