版本:4.26, English
创建:2021-01-30,更新:2021-03-25
作者:Cyanhall
👉  Cyanhall@GitHub 如果有用请点赞。
1. 预备 这是这个教程要完成的效果。

注意:本教程主要内容来自虚幻引擎自带的内容示例

提示:使用 ⬆️ ⬇️ 可上下翻页。推荐用大屏浏览,以获得更好的阅读体验。
Preparation
3. 目标 在这个例子中,精灵(Sprites) 面向系统中心和粒子本身之间的矢量。

然后,该向量本身会根据发射器的年龄进行旋转,以创建旋转的精灵。
Goal
4. 让我们开始重建 右键选择 FX => Niagara System 创建。
Let's start the reconstruction
5. 创建 Niagara System 选择空(Empty)模板,然后点击 + 按钮,点击 Finish
Create Niagara System
6. 创建 Niagara System 由此,我们得到一个 Niagara System 的资产,点击打开它。
Create Niagara System
7. 空 Niagara 系统 可以看到我们有了一个空 Niagara 系统。
Empty Niagara System
8. 生成速率(Spawn Rate) 点击发射器更新(Emitter Update)右边的 + 号,添加生成速率(Spawn Rate)模块。

生成速率(Spawn Rate): 每秒生成的粒子数目。
Spawn Rate
9. 生成速率(Spawn Rate) 设置 生成速率(Spawn Rate) 值为 40.0

每秒生成 40.0 个粒子。
Spawn Rate
10. SineWave 点击发射器属性(Emitter Attributes)右边的 + 号,添加一个 float 属性。
SineWave
11. SineWave 把这个新建的属性命名为 SineWave
SineWave
12. SineWave 拖拽这个属性到 发射器更新(Emitter Update) 下面。

如果把它拖到发射器生成(Emitter Spawn)中,它的值只能设置一次,在发射器诞生的第一帧。
通过在发射器更新(Emitter Update)中设置它,该值每一帧都会得到一个新的值。
SineWave
13. SineWave 因为这是在发射器层面计算的,而不是按粒子计算的,所以每一个引用它的粒子都会得到相同的值,在这种情况下,它们可以同时旋转。

同样的概念也适用于系统级:设置在发射器的变量可以被系统中的每个发射器访问,系统中的每个粒子也可以访问。
SineWave
14. SineWave 设置 SineWave 的值类型为 浮点数钳值(Clamp Float)

浮点数钳值(Clamp Float): 使浮点数不超出最大和最小值。
SineWave
15. SineWave 设置 浮点数(Float) 的值为 Sine 输入。
SineWave
16. SineWave 设置标准化角度(Normalized Angle)的值类型为浮点数相乘(Multiply Float)
SineWave
17. SineWave 设置标准化角度(Normalized Angle)A值为发射器的年龄(Age)
SineWave
18. SineWave 设置标准化角度(Normalized Angle)B值为0.25
SineWave
19. 初始化粒子 选择初始化粒子(Initialize Particles),然后设置:

1. 存活期(Lifetime)6.0
2. 颜色模式(Color Mode)随机范围(Random Range)
3. 颜色通道模式(Color Channel Mode)随机独立通道(Random Individual Channels)
4. 精灵大小模式(Sprite Size Mode)统一随机(Random Uniform),并设其 Min 值为 6.0, Max 为 11.0
Initialize Particles
20. 球体位置(Sphere Location) 粒子生成(Particles Spawn) 部分的添加 球体位置(Sphere Location)模块。
Sphere Location
21. 球体位置(Sphere Radius) 设置球体半径(Sphere Radius)95.0
Sphere Radius
22. FacingCenter 阶段瞬态值(Stage Transients) 模块添加一个 向量(Vector) 变量

注意:
粒子属性(Particle Attributes): 写在粒子阶段的持久属性,可以在粒子阶段读取。
阶段瞬态值(Stage Transients): 瞬态值可以写到任何模块,也可以从任何模块读取。瞬态值不会在帧与帧之间或阶段之间持久化,例如发射器到粒子,或生成到更新。
FacingCenter
23. FacingCenter 将这个新创建的变量命名为:FacingCenter
FacingCenter
24. FacingCenter 拖拽 FacingCenter粒子更新(Particles Update)
FacingCenter
25. FacingCenter 设置FacingCenter的值类型为向量减法(Subtract Vector)
FacingCenter
26. FacingCenter 编辑 A 的值为 粒子.位置(Particles.Position)
FacingCenter
27. FacingCenter 编辑 B 的值为 模拟位置(Simulation Position)

模拟位置(Simulation Position):根据发射器上的 本地空间(Local Space) 标志,返回 Engine.Owner.Position 或本地(0,0,0)
FacingCenter
28. SpriteFacing 粒子属性(Particle Attributes) 模块添加一个 向量(Vector) 变量
SpriteFacing
29. SpriteFacing 将这个新创建的变量命名为:SpriteFacing
SpriteFacing
30. SpriteFacing 拖拽 SpriteFacing粒子更新(Particles Update)
SpriteFacing
31. SpriteFacing 设置SpriteFacing的值类型为旋转向量(Rotate Vector)
SpriteFacing
32. SpriteFacing 设置旋转轴(Vector To Rotate)FacingCenter
SpriteFacing
33. SpriteFacing 1. 设置 摇摆(Yaw)俯仰(Pitch)滚转(Roll) 的值为 60.0
2. 设置 时间增量(Delta Time) 的值为发射器的年龄(Age)
SpriteFacing
34. SpriteFacing 再一次拖拽 SpriteFacing粒子更新(Particles Update)
SpriteFacing
35. SpriteFacing 设置SpriteFacing的值类型为向量插值(Lerp Vector)
SpriteFacing
36. SpriteFacing 设置 A 的值为 FaceCenter
SpriteFacing
37. SpriteFacing 设置 B 的值为上一阶段得到的 SpriteFacing
SpriteFacing
38. SpriteFacing 设置 Alpha 的值为 SineWave

Particles.SpriteFacing是控制粒子面对哪个方向的矢量变量。在这个脚本中,我们在面对一个不断旋转的向量和粒子与球体中心之间的向量之间进行混合。
SpriteFacing
39. 漩涡速度(Vortex Velocity) 粒子更新(Particles Update) 部分添加 漩涡速度(Vortex Velocity)模块。
Vortex Velocity
40. 漩涡速度(Vortex Velocity) 点击第一个 Fix issue 按钮添加其依赖的 解算力和速度(SolveForcesAndVelocity) 模块。
Vortex Velocity
41. 漩涡速度(Vortex Velocity) 设置速度量(Velocity Amount)的值类型为随机范围浮点数(Random Range Float)
Vortex Velocity
42. 漩涡速度(Vortex Velocity) 1. 设置 速度量(Velocity Amount)最小值(Minimum) 值为 50.0, 最大值(Maximum) 值为 160.0.
2. 设置 漩涡轴(Vortex Axis) 的值类型为 向量插值(Lerp Vector)
Vortex Velocity
43. 漩涡速度(Vortex Velocity) 设置 漩涡轴(Vortex Axis)A 向量(A Vector) 的值为 随机向量(Random Vector)
Vortex Velocity
44. 漩涡速度(Vortex Velocity) 设置 漩涡轴(Vortex Axis)B 向量(B Vector) 的值为 随机向量(Random Vector)
Vortex Velocity
45. 漩涡速度(Vortex Velocity) 设置 漩涡轴(Vortex Axis)Alpha 的值为粒子的 标准化年龄(Normalized Age)
Vortex Velocity
46. 缩放精灵大小(Scale Sprite Size) 粒子更新(Particles Update) 部分的添加 缩放精灵大小(Scale Sprite Size)模块。
Scale Sprite Size
47. 缩放精灵大小(Scale Sprite Size) 编辑 缩放因子(Scale Factor)值为 Vector 2DFrom Float
Scale Sprite Size
48. 缩放精灵大小(Scale Sprite Size) 设置他的值类型为 Float from Curve
Scale Sprite Size
49. 缩放精灵大小(Scale Sprite Size) 编辑这条曲线,可以控制其随时间变化的值
Scale Sprite Size
50. 缩放精灵大小(Scale Sprite Size) 选中第一个点,把它拖动到底部。

注:这里也可以选中这个点,直接设置其时间(Time)为:0值(Value)0
Scale Sprite Size
51. 缩放精灵大小(Scale Sprite Size) 鼠标移到小红圈,右键,选择添加一个点到曲线(Add key to Curve)
Scale Sprite Size
52. 缩放精灵大小(Scale Sprite Size) 设置新添加的点的时间(Time)0.5值(Value)2
Scale Sprite Size
53. 缩放精灵大小(Scale Sprite Size) 有时候,新设置的点会超出现有图表的界限,可以点击红圈的按钮调整图表的边界。
Scale Sprite Size
54. 缩放精灵大小(Scale Sprite Size) 用同样的方法,添加两个点:(时间 为 0.07,值 为 1)、(时间 为 0.94,值 为 1)。
Scale Sprite Size
55. 面向模式(Facing Mode) 选择 精灵渲染器(Sprite Renderer),然后设置 面向模式(Facing Mode)自定义面向向量(Custom Facing Vector)

这样设置后,精灵广告牌(Sprite Billboard)会面向 Particles.SpriteFacing 向量属性,如果没有这个属性,则会倒退为 FaceCamera 模式.

FaceCamera 模式: 精灵广告牌(Sprite Billboard)原点会一直"看着"摄像头原点,尝试把它的向上轴(up axis)和摄像头保持一致。
Facing Mode
56. 排序模式(Sorting Mode) 选择 精灵渲染器(Sprite Renderer),然后设置 排序模式(Sorting Mode)视距(View Distance)

这会给渲染设置优先条件:根据到摄像头原点的距离排序
Sorting Mode
57. 绑定(Bindings) Particles.SpriteFacing 并不是唯一一个有特殊的意义、 由模拟自动处理的渲染器绑定(Renderer Binding)。点击一个渲染器,本例中是堆栈底部的 精灵渲染器(Sprite Renderer),然后向下滚动到 Bindings

你会看到一个粒子属性的列表,这些属性对引用它们的渲染器有特殊意义。如果需要的话,每个属性都可以用其他属性覆盖。
Bindings
58. 🎉 完成了! 🎉 👉  Cyanhall@GitHub  如果有用请点赞。

支持我: Patreon
关注我: TwitterReddit知乎Bilibili
🎉 Finish! 🎉
Comments
Preparation