杰瑞科技汇

Particular粒子教程如何快速上手?

Unity Particular 粒子系统终极教程

目录

  1. 第一部分:初识粒子系统

    Particular粒子教程如何快速上手?-图1
    (图片来源网络,侵删)
    • 什么是粒子系统?
    • 粒子系统的核心组成
    • 如何创建和查看一个粒子系统
  2. 第二部分:核心模块详解

    • Main 模块:粒子的基本属性
    • Emission 模块:控制粒子发射
    • Shape 模块:控制粒子发射形状
    • Color over Lifetime 模块:粒子生命周期颜色变化
    • Size over Lifetime 模块:粒子生命周期大小变化
    • Rotation over Lifetime 模块:粒子生命周期旋转变化
    • Velocity over Lifetime 模块:粒子生命周期速度变化
    • Limit Velocity over Lifetime 模块:限制粒子速度
    • Force over Lifetime 模块:持续施加力
    • External Forces 模块:受全局力影响
    • Collision 模块:粒子碰撞检测
    • Sub Emitters 模块:子粒子发射器
    • Texture Animation 模块:粒子动画
    • Renderer 模块:粒子渲染
  3. 第三部分:实战案例 - 制作一个魔法火花特效

    • 目标效果
    • 步骤 1:创建基础粒子流
    • 步骤 2:添加颜色和大小变化
    • 步骤 3:添加拖尾效果
    • 步骤 4:添加发光和模糊
    • 步骤 5:添加碰撞和消散
    • 步骤 6:优化与整合
  4. 第四部分:高级技巧与最佳实践

    • 使用 Shader 控制粒子
    • 粒子与 C# 脚本的交互
    • 性能优化技巧
    • VFX Graph 简介

第一部分:初识粒子系统

什么是粒子系统?

粒子系统是一种在计算机图形学中模拟大量微小粒子(如火焰、烟雾、雪花、魔法、雨滴等)的技术,在 Unity 中,它是一个强大的组件,通过模拟这些粒子的生命周期(出生、运动、消亡)来创建各种复杂的视觉效果。

Particular粒子教程如何快速上手?-图2
(图片来源网络,侵删)

粒子系统的核心组成

一个粒子系统可以想象成一个“粒子工厂”:

  1. 发射器:负责在指定的时间、位置和数量下“发射”或“生成”新的粒子。
  2. 粒子:被发射出的个体,每个粒子都有自己的属性,如位置、速度、颜色、大小、旋转、生命周期等。
  3. 影响器:对已存在的粒子施加影响,如重力、风力、阻力等,改变它们的运动状态。
  4. 渲染器:负责在屏幕上绘制所有粒子。

如何创建和查看一个粒子系统?

  1. 在 Unity 的 Hierarchy 窗口中,右键点击 -> Effects -> Particle System
  2. 你会看到一个默认的粒子系统,在 Scene 视图中,你会看到一个带有播放控制的图标。
  3. 点击 Scene 视图中的播放按钮,你就能看到粒子效果在实时运行。
  4. Inspector 窗口中,你可以看到并调整所有控制粒子行为的模块。

第二部分:核心模块详解

这是理解粒子系统的关键,我们将逐一讲解最重要的模块。

Main 模块

这是粒子系统的核心,定义了粒子最基础的行为。

  • Start Lifetime:粒子的存活时间,单位是秒。
  • Start Speed:粒子被发射时的初始速度。
  • Start Size:粒子被发射时的大小。
  • Start Color:粒子被发射时的颜色。
  • Gravity Modifier:重力影响系数,1 表示标准重力,0 表示无重力,负数表示反重力。
  • Max Particles:场景中同时存在的最大粒子数量。
  • Simulation Space
    • Local:粒子相对于粒子系统本身运动,移动粒子系统时,所有粒子会一起移动。
    • World:粒子在全局坐标系中运动,移动粒子系统时,已发射的粒子不受影响。
  • Play On Awake:是否在场景加载后自动播放。
  • Looping:是否循环播放。

Emission 模块

控制粒子发射的速率和数量。

  • Rate over Time:每秒钟发射多少个粒子。
  • Bursts:一次性发射指定数量的粒子,你可以设置多个爆发点。

Shape 模块

定义粒子从哪里发射出来,以及初始的分布形状。

  • Shape:选择发射形状,如球体、锥体、半球、立方体等。
  • Radius:对于球体、圆锥等形状,控制其半径大小。
  • Angle:对于圆锥形状,控制其张角。
  • Random Direction:粒子发射方向是否随机,勾选后,粒子会从形状表面向各个方向飞散;不勾选,则粒子会沿形状的法线方向统一飞出。

Color over Lifetime 模块

让粒子在生命周期内改变颜色,这是制作渐变效果的关键模块。

  • 你可以在这里添加关键点,创建从生到死的颜色渐变曲线,通常会使用 Alpha 通道来控制粒子的淡入淡出。

Size over Lifetime 模块

让粒子在生命周期内改变大小。

  • 同样是曲线编辑器,可以制作粒子从小变大、从大变小或保持不变的效果。

Rotation over Lifetime 模块

让粒子在生命周期内旋转。

  • Angular Velocity:设置粒子的旋转速度。
  • Rotation Axis:选择旋转轴。

Velocity over Lifetime 模块

让粒子在生命周期内持续改变速度。

  • 你可以分别设置 X, Y, Z 轴的速度变化,可以模拟风吹的效果,让粒子在水平方向上持续加速。

Limit Velocity over Lifetime 模块

限制粒子的最大速度,防止粒子运动过快。

  • Space:选择是在局部空间还是世界空间中限制速度。
  • Magnitude:设置最大速度值。

Force over Lifetime 模块

持续对粒子施加一个力,使其不断加速。

  • Velocity over Lifetime 不同,这个模块直接施加力,效果更符合物理规律(力 = 质量 × 加速度)。

External Forces 模块

让粒子受到场景中全局力的影响(如 Wind Zone 组件)。

  • Multiplier:设置全局力的影响强度。

Collision 模块

启用粒子与场景中物体的碰撞检测。

  • Type:选择碰撞类型(如 World, Plane, Collider 等)。
  • Collider:指定要碰撞的特定物体。
  • Send Collision Messages:是否在碰撞时触发 C# 事件。

Sub Emitters 模块

从一个主粒子系统发射出另一个子粒子系统。

  • Type:子粒子的行为。
    • Birth:主粒子出生时,发射一个子粒子。
    • Death:主粒子死亡时,发射一个子粒子。
    • Collision:主粒子碰撞时,发射一个子粒子。
  • 这非常适合制作“火花溅射”、“爆炸碎片”等效果。

Texture Animation 模块

让粒子在渲染时播放一个序列帧动画。

  • 你需要准备一张包含多帧动画的贴图,然后在这里设置播放速度和帧数。
  • 常用于制作“精灵类”粒子,如云朵、烟雾、鸟群等。

Renderer 模块

定义粒子如何被渲染到屏幕上。

  • Render Mode
    • Billboard:默认模式,粒子始终面向摄像机。
    • Stretched Billboard:粒子沿运动方向拉伸,适合制作高速运动的拖尾。
    • Horizontal Billboard:粒子只在水平面上面向摄像机。
    • Vertical Billboard:粒子只在垂直面上面向摄像机。
    • Mesh:将粒子渲染成指定的 3D 模型。
  • Material:为粒子指定材质,这是决定粒子最终“长相”的核心。
  • Trail Material:为粒子拖尾指定材质(需要开启 Render Trails 选项)。

第三部分:实战案例 - 制作一个魔法火花特效

目标效果:一个从地面升起,带有拖尾、发光效果,并在空中消散的魔法火花。

步骤 1:创建基础粒子流

  1. 创建一个新的 Particle System,命名为 MagicSpark
  2. Main 模块
    • Start Lifetime: 设置为 5 秒。
    • Start Speed: 设置为 2
    • Start Size: 设置为 2
    • Max Particles: 设置为 50
    • Simulation Space: 选择 World
  3. Emission 模块
    • Rate over Time: 设置为 20
  4. Shape 模块
    • Shape: 选择 Cone
    • Angle: 设置为 5,让它向上集中喷射。
    • 取消勾选 Random Direction,让粒子垂直向上。
  5. Renderer 模块
    • Material: 创建一个新的 Unlit/Texture 材质,命名为 SparkMat
    • SparkMatMain Texture 选择一张白色的圆形噪点图(可以在网上搜索 "white noise texture")。
  6. 播放:现在你应该看到一股白色的粒子流向上喷射。

步骤 2:添加颜色和大小变化

  1. Color over Lifetime 模块
    • 添加该模块。
    • 将曲线的起始 Alpha 值设为 0(淡入),中间设为 1,结束设为 0(淡出)。
    • 将曲线的起始颜色设为青色,中间设为亮蓝色,结束设为白色。
  2. Size over Lifetime 模块
    • 添加该模块。
    • 将曲线的起始大小设为 1,然后快速变大到 3,再缓慢变小到 0,这模拟了粒子爆发后收缩的过程。

步骤 3:添加拖尾效果

  1. Renderer 模块
    • 勾选 Render Trails 选项。
    • Trail Material: 复制 SparkMat,命名为 SparkTrailMat
    • SparkTrailMat 的设置中,将 Texture 的 Tiling 的 Y 值调大(如 5),让拖尾看起来更密集。
    • 调整 Min Vertex DistanceLife Time 来控制拖尾的长度和细节。

步骤 4:添加发光和模糊

  1. 材质
    • 选中 SparkMatSparkTrailMat,将它们的着色器从 Unlit/Texture 更改为 Universal Render Pipeline/Unlit/Shader Graph (如果你使用 URP) 或 Standard (内置管线),并勾选 Emission 属性。
    • Emission 属性选择一个明亮的颜色(如亮青色),并增加强度。
  2. 后期处理
    • 在场景中创建一个 Post-process LayerPost-process Volume
    • 在 Volume 中添加 Bloom (泛光) 效果,并调整其强度和阈值,让火花看起来更加璀璨。

步骤 5:添加碰撞和消散

  1. Collision 模块
    • 添加该模块。
    • Type: 选择 World
    • Lifetime Loss: 粒子碰撞后损失的寿命比例,设为 1,意味着粒子一碰到物体就立即消失。
  2. Sub Emitters 模块
    • 添加该模块,模拟碰撞时的小爆炸。
    • Type: 选择 Death
    • 点击 Sub Emitter ObjectNone,创建一个新的、微小的粒子系统作为子发射器,命名为 Burst
    • 配置 Burst 粒子系统:让它瞬间爆发几个小粒子,然后快速消失,你可以复制 MagicSpark 并修改其参数来快速制作 Burst 效果。

步骤 6:优化与整合

  1. 性能:观察 Profiler 窗口,确保粒子数量在合理范围内。
  2. 调整:微调所有曲线和参数,直到效果满意为止。
  3. 预设:如果你对这个效果很满意,可以在 Inspector 窗口右上角的菜单中选择 Save as Preset,方便在其他项目中复用。

第四部分:高级技巧与最佳实践

使用 Shader 控制粒子

标准的粒子材质有时不够灵活,你可以编写自定义的 Shader 或使用 Shader Graph 来实现更复杂的效果,

  • 基于速度的拉伸:让粒子根据运动速度自动拉伸。
  • 基于生命周期的透明度混合:实现更复杂的淡入淡出逻辑。
  • 法线贴图:为 3D 粒子增加表面细节。

粒子与 C# 脚本的交互

  • 获取粒子系统组件

    ParticleSystem ps;
    ParticleSystem.Particle particles; // 用于存储粒子数据
    void Start()
    {
        ps = GetComponent<ParticleSystem>();
    }
  • 动态修改参数

    // 修改发射速率
    var emission = ps.emission;
    emission.rateOverTime = 50f;
    // 爆发发射
    ps.Emit(10); // 立即发射10个粒子
  • 访问单个粒子:使用 GetParticlesSetParticles 方法可以获取和修改场景中每一个粒子的属性,实现完全的动态控制。

性能优化技巧

  1. 粒子数量是王道Max Particles 是影响性能的最主要因素,尽量用巧妙的设计(如使用子发射器)来减少主发射器的粒子数。
  2. 简化材质:复杂的 Shader(如复杂的透明混合、光照计算)会显著增加每个粒子的渲染成本,优先使用 Unlit 着色器。
  3. 使用 BillboardBillboard 模式通常比 Mesh 模式性能更好。
  4. LOD (Level of Detail):为粒子系统创建不同精度的预设,当摄像机远离时,切换到粒子数更少的版本。
  5. 避免频繁的模块开关:在运行时频繁地启用/禁用模块比保持其一直开启但设置强度为 0 的开销更大。

VFX Graph 简介

对于追求极致性能和复杂效果的团队,Unity 提供了 Visual Effect Graph (VFX Graph),它是一个基于节点的、数据驱动的粒子系统,与传统的 ParticleSystem 组件相比:

  • 性能更高:利用 GPU 进行并行计算,能处理数百万个粒子。
  • 功能更强大:内置了更多高级物理和模拟功能。
  • 更现代的 API:与 C# 的交互方式更现代化。

对于初学者,先掌握好 ParticleSystem 是至关重要的,当你需要制作电影级特效或遇到性能瓶颈时,再转向学习 VFX Graph。

分享:
扫描分享到社交APP
上一篇
下一篇