Unity Shader 红旗飘动效果

发表于2018-02-09
评论0 2.4k浏览
想实现一个类似红旗飘动的效果该如何实现呢?考虑到有些人对shader使用的还不够熟练,下面就给大家介绍下在Unity中基于shader实现红旗飘动效果。

效果图:

shader代码:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/PiaoDongQiZhi" {
    Properties 
    { 
        _Color ("Main Color", Color) = (1,1,1,1) 
1
        _MainTex ("Texture", 2D) = "white" { } 
    } 
    SubShader 
    { 
        Pass 
        { 
           CULL Off 
          CGPROGRAM 
          #pragma vertex vert 
          #pragma fragment frag 
          #include "UnityCG.cginc" 
          #include "AutoLight.cginc" 
          float4 _Color; 
          sampler2D _MainTex; 
          // vertex input: position, normal 
          struct appdata { 
              float4 vertex : POSITION; 
              float4 texcoord : TEXCOORD0; 
          }; 
          struct v2f { 
              float4 pos : POSITION; 
              float2 uv: TEXCOORD0; 
          }; 
          v2f vert (appdata v) { 
            v2f o; 
            float sinOff=v.vertex.x+v.vertex.y+v.vertex.z; 
            float t=-_Time*50; 
            float fx=v.texcoord.x; 
            float fy=v.texcoord.x*v.texcoord.y; 
            v.vertex.x+=sin(t*1.45+sinOff)*fx*0.5; 
            v.vertex.y+=sin(t*3.12+sinOff)*fx*0.5-fy*0.9; 
            v.vertex.z-=sin(t*2.2+sinOff)*fx*0.2; 
            //mul返回输入矩阵相乘的积。
            o.pos = UnityObjectToClipPos( v.vertex ); 
            o.uv = v.texcoord; 
             return o; 
          } 
          float4 frag (v2f i) : COLOR 
          { 
             half4 color = tex2D(_MainTex, i.uv); 
             return color; 
          } 
          ENDCG 
          SetTexture [_MainTex] {combine texture} 
        } 
    } 
    Fallback "VertexLit" 
}
建一个材质球,然后赋予plane即可看到效果

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

0个评论