Version: Unity 6.0 (6000.0)
语言 : 中文
粒子系统 (Particle Systems) 中的自定义数据流
粒子系统标准着色器自定义顶点流示例

粒子系统 (Particle System) 自定义顶点流

如果习惯编写自己的着色器,请使用渲染器模块 (Renderer Module)自定义顶点流 (Custom Vertex Streams) 的功能来配置粒子系统,从而将更多数据传入自定义着色器。

有许多内置数据流可供选择,例如速度、大小和中心位置。除了能够创建强大的自定义着色器之外,这些流还可以带来大量其他好处:

  • 使用切线 (Tangent) 流来支持法线贴图粒子。
  • 可以删除 Color,然后添加 UV2AnimBlend 流以便在粒子上使用标准着色器。
  • 需要轻松执行翻页动画的线性纹理混合,请添加 UV2 和 AnimBlend 流,并附加粒子/动画 Alpha 混合着色器 (Particles/Anim Alpha Blended Shader)(请参阅下面的示例截屏,了解如何对其进行设置)。

此外,还有两个完全自定义的每粒子数据流(ParticleSystemVertexStreams.Custom1ParticleSystemVertexStreams.Custom2),可通过脚本填充。请使用数据数组调用 SetCustomParticleDataGetCustomParticleData,以便使用它们。有两种方式使用它们:

  • 通过将您自己的数据附加到粒子来驱动脚本中的自定义行为;例如,将“生命”值附加到每个粒子。
  • 通过添加两个自定义流中的其中一个流将此数据传入着色器,就像将任何其他流发送到着色器一样(请参阅 ParticleSystemRenderer.EnableVertexStreams)。为了详细说明第一个示例,自定义的生命值属性现在也可以驱动某种视觉效果,以及驱动基于脚本的游戏逻辑。

添加顶点流时,Unity 会在每一项旁边的括号中提供一些信息,用于在着色器中读取正确的数据:

括号中的每一项对应于一个顶点着色器输入,应在着色器中指定。以下是此配置的正确输入结构。

            struct appdata_t {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                fixed4 color : COLOR;
                float4 texcoords : TEXCOORD0;
                float texcoordBlend : TEXCOORD1;
            };

请注意,UV 和 UV2 均传递到 TEXCOORD0 的不同部分中,因此我们对两者使用单个声明。要访问着色器中的每一个,应使用 xy 和 zw 标示字母。这样即可有效地打包顶点数据。

其他资源

粒子系统 (Particle Systems) 中的自定义数据流
粒子系统标准着色器自定义顶点流示例