准备工作--在hdr模式下,关闭Directional Light ,相机设置移动球挂一个点光源作为子节点,设置自行调节
.创建移动球的材质及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默认材质。
注意:保存shadergraph在编辑器左上角save asset
为了让移动球看起来发光,我们需要应用光晕后期效果
Create/GameObject / Volume / Global Volume
在Hierachy面板中点击新建的global volume,设置如下图
URP设置
找到urp配置文件,设置如下图防止 Unity 在每一帧都不必要地更新体积数据
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设置
intensity:在blackboard 增加了float属性命名为intensity.拉到编辑界面上。
代码控制效果:
[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创建自发光闪烁 效果
timeColorMat.SetFloat(timeOfLastHitId, Time.time);//代码激活
注意事项:自定义属性 设置timeOfLastHitId默认值-1000。emissioncolor设置hdr.