【实现100个unity特效之27】使用unity的ShaderGraph实现一个带裁剪边缘光的裁剪效果(2d3d通用)

发布于:2025-07-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

普通裁剪效果

1、创建一个Lit Shader Graph

在这里插入图片描述
在这里插入图片描述

2、ShaderGraph前置配置

双击打开ShaderGraph

  • 在ShaderGraph 面板中的Graph Inspector面板上打开Alpha Clipping选项,这样在主节点中才会出现AlphaAlpha Clipping参数。
  • 修改Alpha 改为0.5

3、添加节点

  • 主要节点:Position 、AlphaClip
  • 原理:AlphaClip的值如果比Alpha的值大,则会不显示
    在这里插入图片描述
    此时通过控制Step的Edge值就可以实现裁剪效果了。

4、效果

在这个shaderGraph上右键创建一个材质
在这里插入图片描述
我们随便找一个模型,将材质配置到模型上,并配置对应的贴图信息
在这里插入图片描述
修改Float值,查看效果
在这里插入图片描述

5、修改裁剪方向

通过控制Split节点的R G B三个点可以实现模型左右裁剪、上下裁剪和内外裁剪三种方式。
在这里插入图片描述

带边缘色的裁剪

1、在裁剪的基础上添加裁剪边缘光

关键点在于使用Smoothstep做出一个边缘渐变,然后再加一个Color节点使用Multiply连接到自发光节点Emission上。

  • Smoothstep:如果输入In的值分别在输入Edge1和Edge2的值之间,则返回0和1之间的平滑Hermite插值的结果。如果输入In的值小于输入Step1的值,则返回0;如果大于输入Step2的值,则返回1

最终连线如下
在这里插入图片描述

2、边缘的亮度

注意,我们还可以修改边缘光颜色为HDR模式,这样还能控制边缘的亮度
在这里插入图片描述

3、修改裁剪方向

同样的通过控制Split节点的R G B三个点可以实现模型左右裁剪、上下裁剪和内外裁剪三种方式。
在这里插入图片描述

4、效果

在这里插入图片描述

5、我们可以代码控制它的变化,如下

代码控制参考如下:

public float duration = 5.0f; // 可调整的动画速度参数

/// <summary>
/// 开始建造(初始化)
/// </summary>
public void StartBuild()
{
    UIManager.Instance.AddStoneNum(-useNum);  // 扣除资源
    StartCoroutine(AnimateClip());
}

//建筑动画
private IEnumerator AnimateClip()
{
    float heightOffset = 0f;
    float targetHeight = 5f;

    float elapsedTime = 0f;
    GetComponent<MeshRenderer>().material = normalMaterial;
    while (elapsedTime < duration)
    {
        // 使用插值计算当前高度值
        heightOffset = Mathf.Lerp(0f, targetHeight, elapsedTime / duration);

        // 更新材质属性
        normalMaterial.SetFloat("_Clip", heightOffset);

        // 累计经过的时间
        elapsedTime += Time.deltaTime;
        yield return null;
    }

    // 确保最终值精确
    normalMaterial.SetFloat("_Clip", targetHeight);

    //镜头震动效果
    Camera.main.transform.DOShakePosition(.2f, .5f, 14, 90, false, true);
}

具体实战可以参考:【用unity实现100个游戏之33】用Unity手搓一个类【红色警戒|魔兽争霸|帝国时代|星际争霸】3D RTS游戏(附源码)
在这里插入图片描述

2D3D游戏通用

值得注意的是,这个shader效果,在2d游戏中同样适用,我们基本不需要做其他的修改。
在这里插入图片描述


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】
【unity游戏开发——热更新】
【unity游戏开发——网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到