【转载】Unity 粒子系统中的自定义数据 CustomData

847 阅读2分钟

原文链接

版权声明:本文为CSDN博主「_delta」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/Wind_Code/a…

正文

Unity 粒子系统 —— 自定义数据(CustomData)的使用

所谓的粒子系统的自定义数据,就是如下图的粒子系统选项:

image.png

我们可以在脚本中通过 SetCustomParticleDataGetCustomParticleData 来操作这两个数据。

自定义数据分为两种类型:

  1. Color
  2. Vector

一般来讲我们将 自定义数据 和 粒子系统Renderer 选项中的 Custom Vertex Stream 属性联合起来进行使用。

image.png

这里对 Custom Vertex Stream 进行一下解释:自定义顶点流 和 粒子系统使用的材质中的 Shader 中 顶点着色器的输入数据 有关

比如这里我使用的顶点着色器输入结构体:

struct a2v {
    float4 vertex:POSITION;
    float3 normal:NORMAL;
    float4 texcoord:TEXCOORD0;
    float4 texcoord1:TEXCOORD1;
};

对应 上图,通过 括号前面的变量 来控制 括号当中的语义 对应在 shader 结构体当中的变量

比如上图中最后的 Custom1.xyzw 控制 TEXCOORD1 对应在 shader 中的变量 texcoord1xyzw 变量。

Custom Vertex Stream 中一般默认拥有 PositionNormalColorUV 等语义。其中 UVUV2 依此类推和我们的自定义数据都会 按顺序 填充 TEXCOORD(0,1……) 变量的 xyzw 分量

比如上图中 UV 填充了 TEXCOORD0xy 分量,则按顺序在它下方的 UV2 会填充 TEXCOORD0 剩余的 zw 分量,接下来的自定义数据 Custom1.xyzw 则会填充 TEXCOORD1xyzw 分量,以此类推。

通过以上操作我们可以实现什么效果呢?

自然是可以将 粒子系统中的数据粒子系统使用材质中的 Shader 结合起来操作,比如上图中我将用 Custom1.xyzw 来控制 texcoord1 的四个分量。另外在顶点着色器中写下这样的语句:

o.uv = v.texcoord.xy * v.texcoord1.xy + v.texcoord1.zw;

这样就可以在粒子系统中通过自定义数据来操作着色器中的 UV 偏移,实现效果。

如下定义 Custom1

image.png

这样

  • Custom1xy 分量则控制着 UV 的缩放,
  • zw 分量控制着 UV 的偏移。

还可以将 w 分量设置为 Curve 模式:

image.png

w 分量值在粒子生命周期内不断变化,则会使 UV 进行不停的偏移:

20200224133420849.gif

这里之前是想做一个攻击效果,奈何水平有限,另外录的有点卡,不是粒子的问题