如果要使粒子对象与某个对象发生碰撞,可以编写表达式以在碰撞之后触发表达式语句。例如,可以更改碰撞粒子的颜色或不透明度。
这会将事件属性添加到选定“粒子形状”(particle shape)节点。“表达式编辑器”(Expression Editor)会在“属性”(Attributes)列表中显示添加的事件属性。
长名称 | 短名称 | 说明 | 数据类型 |
---|---|---|---|
事件 |
包含对象中的每个粒子已碰撞某物的次数(基于每粒子)。 |
浮点数组 |
|
eventCount |
evc |
对象的所有粒子发生的事件总数量。 |
整数 |
eventTest |
evt |
如果自上次表达式或 MEL getAttr 命令读取 eventTest 值后事件已出现,则为 True。 |
布尔 |
eventCount 和 eventTest 是静态属性。在您创建粒子对象后,“粒子形状”(particle shape)节点会立即包含它们。尽管它们不会出现在“表达式编辑器”(Expression Editor)中,但您可以在表达式中使用其值。必须首先按如上所述创建事件属性。
假定您已创建了一个名为“Peas”的五粒子对象,该对象在重力作用下降落并与平面发生碰撞。
这会添加一个名为“rgbPP”的每粒子属性。此属性控制每个粒子的红、绿和蓝颜色方案。
粒子在您添加“rgbPP”属性后变为黑色。添加“rgbPP”属性会禁用粒子的默认颜色,并为其提供值 <<0,0,0>>。
if (event == 1) rgbPP = <<1,0,0>>; else if (event == 2) rgbPP = <<0,1,0>>; else if (event >= 3) rgbPP = <<0,0,1>>; else rgbPP = <<1,1,1>>;
粒子朝向平面降落。运行时表达式在每个帧播放时执行。事件属性是每粒子属性。这并不明显,因为其名称的最后两个字符不是 PP。
由于事件包含每个粒子的运行时碰撞计数,因此在第一次与平面发生碰撞前,事件为每个粒子包含 0。在第一次发生碰撞后,最终 Else 语句才会执行:
else rgbPP = <<1,1,1>>;
因为事件不等于 1、2、3 或大于 3 的数字,所以该语句会执行。RGB 颜色方案中的向量 <<1,1,1>> 表示白色。
当“PeasShape”的第一个粒子撞击平面时,Maya 将该粒子的事件属性设置为 1。这将触发执行第一个指定,以将碰撞粒子的 rgbPP 值设置为 <<1,0,0>>。在 RGB 颜色方案中,该向量值表示红色。(当红色等于 1,绿色等于 0,蓝色等于 0 时,结果颜色为红色)。
该事件属性的值反映每次碰撞后帧中的碰撞计数。例如,如果粒子在第 10 帧与平面发生碰撞,则事件会在第 11 帧中更新。
当事件等于 2 时,粒子在与平面发生第二次碰撞前保持红色。在第二次碰撞后,粒子会变为绿色。
在第三次碰撞后,当事件等于或大于 3 时,粒子变为蓝色。在动画播放时,每个粒子在所有后续碰撞中保持蓝色。
粒子会再次变为黑色,因为它们收到默认的“rgbPP”值 <<0,0,0>>。再次播放动画时,与以前一样,这些粒子以相同顺序变为白色、红色、绿色和蓝色。
rgbPP = <<1,1,1>>;
这会从当前帧为属性的初始状态保存所有“PeasShape”属性值。在回放动画时将使用“rgbPP”的当前值。因为您播放的是动画的第二帧,所以这会在该帧保存粒子的白色以在回放动画时使用。
“为“选定”(Selected)对象设置”会保存所有属性值,包括位置、速度、加速度等。如果您在播放期间有多个更改属性值,“为选定对象设置”可能会保存不需要的属性值以及所需的属性值。在此类情况下,请使用创建表达式。