Table of Contents

教程:继承

中级 美术 程序员

本教程解释如何创建从其他粒子继承一个或多个属性(如位置或颜色)的粒子。

示例

要在项目中查看本页面描述的一些技术,请创建一个新的 Sample: Particles 项目并打开 ChildParticles 场景。

粒子示例项目

继承位置

如果你从父级和子级粒子的角度来思考继承,会更容易理解。

例如,在 Sample: Particles 项目的 ChildParticles 场景中,看看 Fireworks 实体。

它包含两个发射器。粒子通过名称引用父级发射器,所以在第一个发射器中你可以看到我们设置了 Emitter Name 属性。这是一个可选名称,但如果你希望其他发射器能够引用此发射器的粒子,它是必需的。

在第二个发射器中,我们创建一个新的初始化器 Position from parent。这让我们可以引用第一个发射器的粒子并使用它们的位置来初始化子粒子。在 Parent emitter 属性中我们填入第一个发射器的名称(Parent)。它会为每个生成的子粒子随机分配一个父级粒子,并将其位置复制给子粒子。

Parent Offset 种子在继承多个属性时用于匹配字段。例如,如果你想从同一个父级粒子(随机选择)继承位置和颜色,你应该让 Parent Offset 种子相同。或者,你可以让两个初始化器的 Parent Offset 种子不同,在这种情况下,从某个父级位置生成的粒子可以从不同的随机粒子继承它们的颜色。通常,你会希望保持它们相同,但在某些情况下你可能想要混合它们。

media/particles-tutorials-inheritance-1.png

如你所见,这种继承不控制生成数量、最大粒子数或任何其他参数,而且非常随机。对于大多数效果来说这已经足够了,但有时你希望对粒子有更直接的控制。

受控继承

有时你会希望从特定的父级生成一定数量的粒子,并让这些粒子只从生成它们的父级粒子继承属性。

为此,为子发射器选择类型为 From parent 的生成器。在 Parent emitter 字段中填入父级发射器的名称。

Spawn Control Group 决定粒子如何保存它们的控制信息。你需要在所有初始化器上分配相同的控制组,才能检索生成信息。

最多可以有 4 个控制组。如果你基于不同的条件生成粒子,或者从同一个父级生成超过两种不同的子粒子,请为它们分配不同的控制组,以免混淆。

Particle Spawn Trigger 是父级一侧的触发条件,它决定是否应该生成粒子。如果你将其保留为 None,则不会生成任何粒子,所以请将其设置为 On Hit 或 Lifetime。

On hit 适用于分配了碰撞体的父级粒子,每次它们命中表面时触发。

Lifetime 基于父级粒子的相对存活时间,每次存活时间在限制范围内时每帧触发。有两个滑块控制应该从哪个点到哪个点生成粒子。或者,你可以反转它们以反转生成条件。例如,具有存活时间条件 (0.9 - 1.0) 的粒子只会在其存活时间的最后 10% 生成子粒子。

最后,Particles/trigger 决定每次条件满足时生成多少粒子。

对于子发射器,控制发射器可以拥有的最大粒子数是一个好习惯,尤其是在碰撞命中等非确定性情况下。

确定性

在初始化器上,选择与生成器控制组对应的 Spawn Control Group。这会强制初始化器只对通过触发条件生成的粒子起作用,跳过其余的粒子(如果分配了多个生成器)。

缎带与轨迹

缎带和轨迹渲染器在开始时设置起来有点困难,因为它们依赖于生成顺序。对于父级的情况,它们还变得依赖于父级的生成顺序。

  1. 为父级添加一个 Spawn Order 初始化器。它将用于子粒子中。

  2. 在子发射器上,移除所有生成器,只添加一个 From parent。你要控制子粒子的生成,以便所有粒子都能在父级粒子后面正确地组合成缎带。如果你添加另一个为系统增加随机行为的生成器,缎带会以错误的方式连接。将触发条件设置为 Lifetime。

  3. 再次回到子发射器这边,添加一个 Order from parent 初始化器。它为粒子分配生成顺序,但也按父级对它们进行分组。如果你将 Sort 设置为使用此顺序并分配缎带形状构建器,你会看到每条轨迹如何在其生成的父级粒子后面正确分组。

循环行为

粒子发射器可以相互循环继承属性,甚至可以从同一发射器中的粒子继承属性。这可以产生随机或"摆动"的效果,但也可能很有趣。

在 Sample: Particles 项目 MainScene 中的 Colliding Particles 粒子实体中,你可以看到粒子在命中时生成,但父级发射器是同一个。这意味着每次粒子命中表面时,它都会产生更多同类粒子。有两个重要的元素使这成为可能。

首先,我们有两个生成器。一个每秒生成少量粒子,为我们提供填充系统的初始元素。另一个生成器在命中时生成更多粒子,并使用控制组。

其次,我们有两个 Position 初始化器。第一个分配我们希望粒子出现的位置。它作用于所有粒子(甚至是那些从父级生成的粒子),所以如果你保持这样,每次粒子命中表面时都会从初始位置发射更多粒子。

第二个初始化器是 Position from parent,它使用与 On hit 生成器相同的控制组来初始化粒子位置。Position from parent 会覆盖具有该控制组的粒子的位置,而让从 Per second 生成器生成的粒子保持不变。这会产生少量不断从单个入口点涌出的粒子,每次它们命中表面时就会像雪崩一样倍增。

另请参阅