效果如图
![](https://i-blog.csdnimg.cn/blog_migrate/22d0787712c1ae82ccb2a420adfd3eac.gif)
准备工作--
在hdr模式下,关闭Directional Light ,相机设置
![](https://i-blog.csdnimg.cn/blog_migrate/3a8e998ffe3365616fbe100df6b340e4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/44f7bb99b10c319d0c56ce7098fe7780.png)
移动球挂一个点光源作为子节点,设置自行调节
![](https://i-blog.csdnimg.cn/blog_migrate/78c5391096ac24904f4329ea658d85fc.png)
0.创建移动球的材质及shader
shader-->在Project / Create / Shader Graph/ URP / unlit shader graph;
双击新创建的shadergraph文件,在shadergraph编辑器中 右键new node 输入color。将color链接到fragment。color的mode选择HDR【点击颜色条可以增强或减弱HDR颜色,调整效果】; 新建一个材质点击inspector面板最上面的shader右侧edit按钮选择该shadergraph;再将这个材质替换移动球MeshRenderer的materials默认材质。
![](https://i-blog.csdnimg.cn/blog_migrate/b4c7a5061f1d8fa6fd91e1c9b8ee1090.png)
注意:保存shadergraph在编辑器左上角save asset
![](https://i-blog.csdnimg.cn/blog_migrate/61d29545eda1c3b6266b5bd9689e5624.png)
为了让移动球看起来发光,我们需要应用光晕后期效果
Create/GameObject / Volume / Global Volume
在Hierachy面板中点击新建的global volume,设置如下图
![](https://i-blog.csdnimg.cn/blog_migrate/7ee288e3a722e654bd594f97b6d5c38c.png)
URP设置
找到urp配置文件,设置如下图防止 Unity 在每一帧都不必要地更新体积数据
![](https://i-blog.csdnimg.cn/blog_migrate/d63b92c1924f0ece20c82f6337a889f2.png)
HDR粒子特效设定[类似火花粒子效果]
在移动球创建一个粒子子节点,
停用Looping和Play On Awake.
Start Lifetime值范围:0.5–1
Start Speed到 2–4
Start Size到 0.5。
改变Simulation Space值为World
Emitter Velocity Mode到Transform.
Emission模块的rate over time 值为0,rate over distance 值为0
Shape模块设置为cone,Angle值45 Radius值 0.5。
启用Color over Lifetime模块,从黄色到红色的颜色渐变,其 alpha 在两端设置为零,在 10% 时设置为 255。
启用Size over Lifetime模块,线性曲线从 1 下降到 0。
设置Mode模块的Renderer值为Mesh,它默认使用立方体。让它使用我们的粒子材料。
shader-->在Project / Create / Shader Graph/ URP / unlit shader graph;还是无光照着色器
shader设置
![](https://i-blog.csdnimg.cn/blog_migrate/61acccc5a1e1bbb2555e45757e9e95eb.png)
intensity:在blackboard 增加了float属性命名为intensity.拉到编辑界面上。
![](https://i-blog.csdnimg.cn/blog_migrate/962d99bd0b029176ce5f3f1d8acfddfb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/75e338e06a723d8ee14f10cb0bf4bacd.png)
代码控制效果:
[SerializeField]
ParticleSystem pball;
[SerializeField]
int emisCount = 20;//控制每次弹跳生成多少粒子
//发射锥必须正确定位和旋转
void EmitGrow (float x, float z, float rotation)
{
ParticleSystem.ShapeModule shape = pball.shape;
shape.position = new Vector3(x, 0f, z);
shape.rotation = new Vector3(0f, rotation, 0f);
pball.Emit(emisCount);
}
未完待续
使用lit shadergraph创建自发光闪烁 效果
设置图
![](https://i-blog.csdnimg.cn/blog_migrate/85449d7ce26c6c51cd38f79c48dbeb2c.png)
timeColorMat.SetFloat(timeOfLastHitId, Time.time);//代码激活
效果
![](https://i-blog.csdnimg.cn/blog_migrate/951dab2dfa8a07645c822116e8634553.gif)
注意事项:自定义属性 设置timeOfLastHitId默认值-1000。
emissioncolor设置hdr.