原文链接
版权声明:本文为CSDN博主「_delta」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
正文
Unity 粒子系统 —— 自定义数据(CustomData)的使用
所谓的粒子系统的自定义数据,就是如下图的粒子系统选项:
我们可以在脚本中通过
SetCustomParticleData和GetCustomParticleData来操作这两个数据。
自定义数据分为两种类型:
ColorVector
一般来讲我们将 自定义数据 和 粒子系统 的 Renderer 选项中的 Custom Vertex Stream 属性联合起来进行使用。
这里对 Custom Vertex Stream 进行一下解释:自定义顶点流 和 粒子系统使用的材质中的 Shader 中 顶点着色器的输入数据 有关
比如这里我使用的顶点着色器输入结构体:
struct a2v {
float4 vertex:POSITION;
float3 normal:NORMAL;
float4 texcoord:TEXCOORD0;
float4 texcoord1:TEXCOORD1;
};
对应 上图,通过 括号前面的变量 来控制 括号当中的语义 对应在 shader 结构体当中的变量
比如上图中最后的 Custom1.xyzw 控制 TEXCOORD1 对应在 shader 中的变量 texcoord1 的 xyzw 变量。
Custom Vertex Stream 中一般默认拥有 Position、Normal、Color、UV 等语义。其中 UV、UV2 依此类推和我们的自定义数据都会 按顺序 填充 TEXCOORD(0,1……) 变量的 xyzw 分量
比如上图中 UV 填充了 TEXCOORD0 的
xy分量,则按顺序在它下方的 UV2 会填充 TEXCOORD0 剩余的zw分量,接下来的自定义数据 Custom1.xyzw 则会填充 TEXCOORD1 的xyzw分量,以此类推。
通过以上操作我们可以实现什么效果呢?
自然是可以将 粒子系统中的数据 和 粒子系统使用材质中的 Shader 结合起来操作,比如上图中我将用 Custom1.xyzw 来控制 texcoord1 的四个分量。另外在顶点着色器中写下这样的语句:
o.uv = v.texcoord.xy * v.texcoord1.xy + v.texcoord1.zw;
这样就可以在粒子系统中通过自定义数据来操作着色器中的 UV 偏移,实现效果。
如下定义 Custom1:
这样
- Custom1 的
xy分量则控制着 UV 的缩放, zw分量控制着 UV 的偏移。
还可以将 w 分量设置为 Curve 模式:
让 w 分量值在粒子生命周期内不断变化,则会使 UV 进行不停的偏移:
这里之前是想做一个攻击效果,奈何水平有限,另外录的有点卡,不是粒子的问题