前言
- 本文将使用ShaderGraph制作一个根据坐标控制溶解的位置,物体靠近局部溶解的效果,可以直接拿到项目中使用。
- 对ShaderGraph还不了解的小伙伴可以参考这篇文章:【Unity ShaderGraph】| Shader Graph入门介绍 | 简介 | 配置环境 | 窗口介绍 | 简单案例
- 下面就开始看一下具体的制作流程,然后自己动手制作一个吧!
【Unity ShaderGraph】| 物体靠近时局部溶解,根据坐标控制溶解的位置
一、效果展示
二、根据坐标控制溶解的位置,物体靠近局部溶解
首先在Project下右键 Creat - > Shader Graph -> URP -> Lit Shader Graph
创建一个Lit Shader Graph
。
然后双击打开该ShaderGraph,在ShaderGraph 面板
中的Graph Inspector面板
上打开Alpha Clipping
选项,这样在主节点中才会出现Alpha 和Alpha Clipping参数,将Alpha 改为0.5。
然后按照下图所示进行节点添加和连接:
这里声明了一个Vector3类型的targetpos变量用于接收外部目标物体的坐标位置,Float类型的strength用来控制溶解的强度。
根据Position
节点和targetpos
的信息,使用Distance
节点来计算 目标位置 距离我们要溶解的模型的顶点坐标的距离,根据这个距离配合噪声节点来控制溶解的触发效果。
效果如下:
三、应用实例
创建完上述ShaderGraph之后在Project下创建一个材质球Material,然后将该ShaderGraph拖到该材质球上即可应用。
此时在场景中添加两个GameObject进行测试,将材质球拖到其中一个对象上用于触发溶解效果,另一个对象用来靠近第一个物体。
还需要创建一个脚本DissolutionTest.cs
用来控制材质球的参数,脚本代码如下:
using UnityEngine;
/// <summary>
/// 该脚本挂在要溶解的物体上
/// </summary>
public class DissolutionTest : MonoBehaviour
{
/// <summary>
/// 材质球
/// </summary>
public Material mat;
/// <summary>
/// 要靠近过来的物体
/// </summary>
public Transform m_targetObj;
public GameObject matGo;
void Update()
{
mat.SetVector("Vector3_5ed88c362a9e4bbca58e136b649d69fd", m_targetObj.position);
}
}
SetVector方法的第一个参数为ShaderGraph中strength
的Reference
值,根据自己的实际参数填写即可,也可以手动将strength的Reference值给修改成指定数值。
将该脚本拖到场景中想要进行溶解的物体身上,然后将对应的溶解效果材质和目标对象拖到该脚本中。
此时运行程序,拖动对象进行效果测试:
使用这个材质可以做一些有趣的玩法,比如有些地方或物品,需要玩家靠近后开始溶解并显示内部的场景,增加游戏趣味性。