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如何设置子域名(二级域名)独立解析
  • 热门搜索
    健客网上药店怎么样 显卡和cpu怎么搭配 无线路由器怎么桥接 粤s是哪里 在哪里可以看黄 dnf佩拉维恩在哪里 核电站怎么发电 资生堂化妆品怎么样 良渚古城遗址位于浙江省哪里 一朵纸尿裤怎么样