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

 时间:2026-02-13 10:37:17

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

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

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

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

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、向工程中导入贴图,具体如下图

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 英国零钱的使用
  • oracle如何删除用户
  • 头一次做焗鸭
  • MEGA RUN三星通关攻略 1-2
  • namecheap如何设置子域名(二级域名)独立解析
  • 热门搜索
    怎么更改电脑开机密码 烫伤水泡怎么处理 怎么找工作比较靠谱 痔疮掉出来了怎么办 语文试卷分析怎么写 上眼皮肿是怎么回事 旧衣服怎么处理 吉他f和弦怎么按 专柜验货怎么验 日记的格式怎么写