【实现100个unity特效之27】使用unity的ShaderGraph实现一个带裁剪边缘光的裁剪效果(2d3d通用)_unity3d使用apng
文章目录
- 普通裁剪效果
-
- 1、创建一个Lit Shader Graph
- 2、ShaderGraph前置配置
- 3、添加节点
- 4、效果
- 5、修改裁剪方向
- 带边缘色的裁剪
-
- 1、在裁剪的基础上添加裁剪边缘光
- 2、边缘的亮度
- 3、修改裁剪方向
- 4、效果
- 5、我们可以代码控制它的变化,如下
- 2D3D游戏通用
- 专栏推荐
- 完结
普通裁剪效果
1、创建一个Lit Shader Graph
2、ShaderGraph前置配置
双击打开ShaderGraph
- 在ShaderGraph 面板中的
Graph Inspector
面板上打开Alpha Clipping
选项,这样在主节点中才会出现Alpha
和Alpha 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; // 可调整的动画速度参数/// /// 开始建造(初始化)/// 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游戏中同样适用,我们基本不需要做其他的修改。
专栏推荐
完结
好了,我是向宇
,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!