多语言展示
当前在线:1831今日阅读:183今日分享:19

Unity 消融特效教程之 定向消融效果的快速实现

Unity 消融特效教程之 定向消融效果的快速实现。本节介绍,在Unity开发中,从某个方向开始溶解的特效方法,具体如下
工具/原料

Unity

方法/步骤
1

打开Unity,新建一个工程,具体如下图

2

新建一个 Shader,可以命名为 Dissolve,双击打开脚本进行编辑,具体如下图

3

编辑 Shader,具体内容如下:Shader 'Custom/Dissolve' {    Properties    {        _MainTex ('Texture', 2D) = 'white' {}        _NoiseTex('Noise', 2D) = 'white' {}        _Threshold('Threshold', Range(0.0, 1.0)) = 0.5        _EdgeLength('Edge Length', Range(0.0, 0.2)) = 0.1        _RampTex('Ramp', 2D) = 'white' {}        _Direction('Direction', Int) = 1 //1表示从X正方向开始,其他值则从负方向        _MinBorderX('Min Border X', Float) = -0.5 //可从程序传入        _MaxBorderX('Max Border X', Float) = 0.5  //可从程序传入        _DistanceEffect('Distance Effect', Range(0.0, 1.0)) = 0.5    }    SubShader    {        Tags { 'Queue'='Geometry' 'RenderType'='Opaque' }        Pass        {            Cull Off             CGPROGRAM            #pragma vertex vert            #pragma fragment frag                        #include 'UnityCG.cginc'            struct appdata            {                float4 vertex : POSITION;                float2 uv : TEXCOORD0;            };            struct v2f            {                float4 vertex : SV_POSITION;                float2 uvMainTex : TEXCOORD0;                float2 uvNoiseTex : TEXCOORD1;                float2 uvRampTex : TEXCOORD2;                float objPosX : TEXCOORD3;            };            sampler2D _MainTex;            float4 _MainTex_ST;            sampler2D _NoiseTex;            float4 _NoiseTex_ST;            float _Threshold;            float _EdgeLength;            sampler2D _RampTex;            float4 _RampTex_ST;            int _Direction;            float _MinBorderX;            float _MaxBorderX;            float _DistanceEffect;                        v2f vert (appdata v)            {                v2f o;                o.vertex = UnityObjectToClipPos(v.vertex);                o.uvMainTex = TRANSFORM_TEX(v.uv, _MainTex);                o.uvNoiseTex = TRANSFORM_TEX(v.uv, _NoiseTex);                o.uvRampTex = TRANSFORM_TEX(v.uv, _RampTex);                //v.vertex 设置方向                o.objPosX = v.vertex.x;                return o;            }                        fixed4 frag (v2f i) : SV_Target            {                float range = _MaxBorderX - _MinBorderX;                float border = _MinBorderX;                if(_Direction == 1) //1表示从X正方向开始,其他值则从负方向                    border = _MaxBorderX;                float dist = abs(i.objPosX - border);                float normalizedDist = saturate(dist / range);                fixed cutout = tex2D(_NoiseTex, i.uvNoiseTex).r * (1 - _DistanceEffect) + normalizedDist * _DistanceEffect;                clip(cutout - _Threshold);                float degree = saturate((cutout - _Threshold) / _EdgeLength);                fixed4 edgeColor = tex2D(_RampTex, float2(degree, degree));                fixed4 col = tex2D(_MainTex, i.uvMainTex);                fixed4 finalColor = lerp(edgeColor, col, degree);                return fixed4(finalColor.rgb, 1);            }            ENDCG        }    }}

4

向工程中导入贴图,具体如下图

5

在工程中新建一个材质,把 Shader 设置为 刚才新建的 Shader,并把导入的图片对应赋值上去,具体如下图

6

新建一个脚本 Test,双击脚本进行编辑,具体如下图

7

Test 脚本的具体代码和代码说明如下图

8

脚本编译正确,回到Unity,在场景中新建一个 Cube,把脚本和材质赋值给 Cube,具体如下图

9

运行场景,就会看到溶解从 X 轴方向,开始溶解,具体如下图

10

可以通过改变材质的 Distance Effect 调整溶解边缘的效果,具体如下图

11

运行场景,即会看到溶解边缘效果变了,具体如下图

12

到此,《Unity 消融特效教程之 定向消融效果的快速实现》讲解结束,谢谢

注意事项

您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言 经

推荐信息