一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 12 天,点击查看活动详情。
📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!
Affector影响器
前言
经过前面的几篇文章,已经将粒子系统的三个重要部分进行了详细探究,剩下的这最后一个部分就是今天要讲的Affector影响器。前面文章中的例子中较少用到影响器,产生的变化较少,而增加了影响器,则可使得整个粒子发射系统发生翻天覆地的变化。
简介
影响器是粒子系统的一个可选组件。它们可以对模拟执行各种操作,例如改变粒子的轨迹或提前结束它们在模拟中的生命。
Affector影响器有一个基础类型Affector,下面有八个子类型:
- Age
- Attractor
- Friction
- Gravity
- GroupGoal
- SpriteGoal
- Turbulence
- Wander 本节先对基础类型Affector进行探究,其余子类型后面的文章会逐渐进行讲解。
属性列表
属性 | 类型 | 描述 |
---|---|---|
acceleration | StochasticDirection | 受影响的粒子将其加速度设置为这个方向。 |
enabled | bool | 如果enabled设置为false,此影响器将不会影响任何粒子。默认值为true。 |
groups | list<string> | 哪些逻辑粒子组将受到影响。如果为空,它将影响所有粒子。 |
once | bool | 如果once被设置为true,这个影响器将只影响每个粒子一次。如果影响器通常模拟一段时间内的连续效应,那么它将模拟一秒时间内的效应即它影响粒子的瞬间。默认为false。 |
position | StochasticDirection | 受影响的粒子将其位置设置为这个方向,相对于粒子系统。当将方向解释为点时,可以将其想象为一个箭头,其基础在ParticleSystem的0,0处,尖端在指定位置处。 |
relative | bool | 受影响的粒子是否将其现有的位置/速度/加速度添加到新粒子上。默认值为true。 |
shape | Shape | 如果已定义大小,则形状属性可用于影响非矩形区域。 |
system | ParticleSystem | 这就是受元件影响的系统。如果Affector是一个粒子系统的直接子元素,它将自动与粒子系统相关联。 |
velocity | StochasticDirection | 受影响的粒子将其速度设置为这个方向。 |
whenCollidingWith | list<string> | 如果这里指定了任何逻辑粒子组,那么只有当被选中的粒子与这些组中的一个粒子相交时,才会触发影响器。这与groups属性不同。groups属性选择哪些粒子可以被检查,如果它们满足其他标准(包括在Affector的范围内,通过形状修改),那么它们将再次被测试,以查看它们是否与whenCollidingWith中的一个粒子组中的粒子相交。默认情况下,不指定任何组。 |
实战使用
基本属性的使用
上述属性列表中列出了基础类型Affector的所有可用属性,下面将结合代码对这些属性进行演示。
改变位置
//! [A]
Affector {
groups: ["A"]
x: 120
width: 80
height: 80
once: true
position: PointDirection { x: 120; }
}
//! [A]
A影响器用到了基础属性中的groups、once和position。这个影响器设置的大小为宽80、高80,在此范围内经过的粒子组A的粒子都会受到它的影响而做出改变。由于将once属性设置为true,则所有粒子只会改变一次,改变的内容就是将粒子放置在position属性所设置的位置。
简单来说,选定一个粒子组A,这个粒子组中经过影响器A的范围后会改变一次所在位置。下面是演示效果。
可以从图中看到,粒子组一下子变到了x=120px的位置,看上去就好像中间断了一截似的。
改变初速度
//! [B]
Affector {
groups: ["B"]
x: 120
y: 240
width: 80
height: 80
once: true
velocity: AngleDirection { angleVariation:360; magnitude: 72 }
}
//! [B]
B影响器与A影响器类似,不同之处在于改变的属性变成了velocity。这个属性会将经过影响器范围的所选粒子的初始速度进行改变。此段代码中将粒子组的初始速度变成了角速度。
可以看到,本来是横向运动的粒子经过影响器的范围后初始速度发生变化,呈现出了发散状态。
改变加速度
//! [C]
Affector {
groups: ["C"]
x: 120
y: 400
width: 80
height: 120
once: true
relative: false
acceleration: PointDirection { y: -80; }
}
//! [C]
C影响器使用到的基础属性有groups、once、relative和acceleration。在这里将relative设置为false,表示将粒子加速度设置为PointDirection { y: -80; },而不是采用添加的方式。
图中蓝色粒子本来的方向是微微向右下角倾斜,经过影响器范围后,变成了大幅度向上倾斜的状态。