Unity 3D 粒子特效完全指南
粒子系统是 Unity 中最强大、最灵活的视觉特效工具之一,它通过大量微小的、独立的图像(粒子)来模拟各种自然现象和视觉效果,如火焰、烟雾、水流、魔法、爆炸、天气效果等。

本教程将分为以下几个部分:
- 第一部分:核心概念 - 理解粒子系统的“五脏六腑”
- 第二部分:基础实战 - 制作一个简单的“魔法光环”
- 第三部分:进阶技巧 - 让特效“活”起来
- 第四部分:性能优化与最佳实践
- 第五部分:资源推荐与总结
第一部分:核心概念
在开始之前,我们必须了解粒子系统的几个关键组件,你可以在 Inspector 窗口中看到一个粒子系统的各种模块。
主模块
这是粒子系统的核心设置,控制着粒子的整体行为。
- Duration (持续时间): 粒子系统发射粒子的总时间,设为 -1 表示无限发射。
- Looping (循环): 是否循环播放粒子效果。
- Play On Awake (在唤醒时播放): 场景加载后是否自动开始播放。
- Start Lifetime (初始生命周期): 每个粒子从诞生到消失的时间。
- Start Speed (初始速度): 粒子诞生时的初始速度。
- Start Size (初始大小): 粒子诞生时的大小。
- Start Color (初始颜色): 粒子诞生时的颜色。
- Gravity Modifier (重力系数): 控制粒子受重力影响的程度,0 表示不受重力,1 表示正常重力,负值会使粒子向上飘。
- Simulation Space (模拟空间):
Local(局部): 粒子相对于粒子系统发射器的位置移动,如果移动发射器,粒子会跟着一起移动。World(世界): 粒子在绝对世界空间中移动,移动发射器不会影响已存在的粒子。Custom(自定义): 粒子相对于一个自定义的 Transform 对象移动。
发射器模块
控制粒子如何被“吐”出来。

- Rate over Time (按时间发射率): 每秒发射多少个粒子。
- Burst (爆发): 可以设置在特定时间点一次性发射大量粒子,非常适合制作爆炸或魔法施放瞬间。
形状模块
定义粒子发射的形状和区域。
- Shape Type (形状类型):
Sphere(球体): 从球体表面或内部发射。Hemisphere(半球): 从半球表面或内部发射。Cone(锥体): 从锥体底面或内部发射,这是最常用的形状之一,例如火焰、喷泉。Box(立方体): 从立方体表面或内部发射。Mesh(网格): 从指定 3D 模型的表面发射,非常强大,可以模拟从角色身上飘散的尘埃或从物体上剥落的碎片。
- Radius/Radius Thickness/Angle 等: 根据选择的形状,这些参数会控制发射区域的具体细节。
颜色模块
控制粒子在生命周期内的颜色变化。
- Color over Lifetime (颜色随生命周期变化): 使用渐变色条,可以设置粒子从诞生到死亡的颜色变化曲线。
- Color by Speed (按速度着色): 根据粒子的速度改变其颜色。
尺寸模块
控制粒子在生命周期内的大小变化。
- Size over Lifetime (大小随生命周期变化): 设置粒子大小的变化曲线,烟雾粒子会逐渐变大变淡。
- Size by Speed (按速度缩放): 根据粒子速度改变其大小。
旋转模块
控制粒子的旋转。

- Rotation over Lifetime (旋转随生命周期变化): 设置粒子在生命周期内的旋转速度和方向。
- Randomize Rotation (随机旋转): 为每个粒子设置一个随机的初始旋转角度。
速度模块
控制粒子的速度。
- Constant (恒定速度): 给所有粒子一个恒定的速度。
- Constant Random (随机恒定速度): 在一个范围内随机分配速度。
- Curved (曲线速度): 使用曲线来控制速度如何随时间变化。
噪波模块
这是一个非常强大的模块,可以为粒子添加随机、有机的运动。
- Noise Strength (噪波强度): 控制噪波对粒子运动的影响程度。
- Noise Frequency (噪波频率): 控制粒子运动的“平滑度”或“混乱度”,低频率像波浪,高频率像颤抖。
- Separate Axes (分离轴向): 可以独立控制 X, Y, Z 轴上的噪波效果。
渲染器
决定粒子最终以什么形式显示在屏幕上。
- Render Mode (渲染模式):
Billboard(广告牌): 粒子始终面向摄像机,这是最常用的模式,适合火焰、烟雾等。Stretched Billboard(拉伸广告牌): 根据粒子速度拉伸粒子,形成拖尾效果,适合制作高速粒子流。Horizontal Billboard(水平广告牌): 始终面向摄像机,但只在水平轴上旋转,适合需要固定朝向的粒子,如草。Vertical Billboard(垂直广告牌): 始终面向摄像机,但只在垂直轴上旋转。Mesh(网格): 使用 3D 模型作为粒子,可以制作树叶、雪花、碎片等复杂效果。
- Material (材质): 指定用于渲染粒子的材质,这是控制粒子外观的关键。
第二部分:基础实战 - 制作一个简单的“魔法光环”
让我们动手创建一个简单的、旋转的蓝色魔法光环。
步骤 1:创建粒子系统
- 在 Hierarchy 窗口中右键 ->
Effects->Particle System,场景中会出现一个新的粒子系统,并自动开始播放。 - 选中这个粒子系统,将其重命名为 "MagicOrbit"。
步骤 2:调整主模块
- 在 Inspector 中找到
Main模块。 - Duration: 改为
2。 - Looping: 勾选。
- Start Lifetime: 改为
2,这确保粒子在消失前存在足够长的时间。 - Start Speed: 改为
0,我们不希望粒子向外飞散。 - Start Size: 改为
5。 - Start Color: 选择一个你喜欢的蓝色,
#00BFFF。 - Gravity Modifier: 改为
0,魔法不受重力影响。
步骤 3:调整发射器模块
- 找到
Emission模块。 - Rate over Time: 改为
10,每秒发射 10 个粒子。
步骤 4:调整形状模块
- 找到
Shape模块。 - Shape Type: 选择
Hemisphere(半球)。 - Radius: 改为
2,粒子将在一个半径为 2 的半球面上发射。 - Angle: 改为
5,让发射口更集中一些。
步骤 5:调整尺寸和颜色
- Size over Lifetime: 点击曲线,添加两个关键帧,左边(时间0)的值设为
5,右边(时间1)的值设为1,这样粒子会逐渐变小。 - Color over Lifetime: 点击渐变色条,设置一个从亮蓝色到透明的渐变,在颜色条的末尾,将 Alpha(透明度)滑块拉到最左侧(0)。
步骤 6:添加噪波让粒子旋转
- 找到
Noise模块。 - Noise Strength: 将 X 和 Z 轴的值都设为
1。 - Noise Frequency: 改为
5。 - Separate Axes: 勾选。
- 点击播放,你会发现粒子开始围绕中心旋转了,通过调整
Strength和Frequency,你可以改变旋转的速度和混乱程度。
步骤 7:调整渲染器
- 找到
Renderer模块。 - Material: 默认的材质可能效果不佳,我们可以创建一个新的。
- 在 Project 窗口中右键 ->
Create->Material,命名为 "MagicMat"。 - 选中 "MagicMat",在 Inspector 中将
Shader(着色器) 更改为Unlit/Transparent(无光照/透明)。 - 将
Color设置为和粒子初始颜色一致或更亮的蓝色。 - 将这个 "MagicMat" 拖拽到粒子系统的
Renderer->Material槽位中。
- 在 Project 窗口中右键 ->
一个简单的旋转魔法光环就完成了!你可以继续调整各个参数,看看它们如何影响最终效果。
第三部分:进阶技巧 - 让特效“活”起来
基础设置只能做出静态的效果,要让特效与游戏世界互动,需要使用更高级的技术。
粒子碰撞
让粒子与场景中的物体发生碰撞。
- 准备工作:
- 在场景中创建一个平面或一个立方体作为碰撞体。
- 确保这个物体有
Collider组件(如Box Collider,Mesh Collider)。 - 选中你的粒子系统,在
Collision模块中勾选Enabled。
- 参数设置:
- Collides With: 设置粒子与哪些层发生碰撞,只勾选
Default层。 - Send Collision Messages: 勾选后,当粒子碰撞时,可以触发被碰撞物体上脚本的
OnParticleCollision()函数,这是实现交互的关键。 - Lifetime Loss: 碰撞后粒子生命值的减少量。
- Speed Loss Factor: 碰撞后粒子速度的衰减系数。
- Collides With: 设置粒子与哪些层发生碰撞,只勾选
粒子子发射器
在一个粒子的生命周期内,从该粒子身上发射出新的粒子,这是制作复杂效果(如爆炸后产生烟雾,火焰产生火星)的核心。
- 准备工作:
- 创建一个新的粒子系统,命名为 "Smoke",用来做烟雾效果。
- 调整 "Smoke" 的参数,使其看起来像烟雾(颜色灰白、逐渐变大变淡、受重力影响)。
- 设置子发射器:
- 回到主粒子系统(如 "MagicOrbit" 或 "Explosion")。
- 在
Additional Data或Triggers模块中(不同版本Unity位置可能不同),找到Sub Emitters子模块。 - 点击
Add Sub Emitter按钮。 - 在新的一行中,点击
None (Particle System),然后将你创建好的 "Smoke" 粒子系统拖拽进来。 - Emit: 选择发射时机,常用的是
On Destroy(粒子被销毁时)和On Collision(粒子碰撞时)。
当主粒子的生命周期结束时,会自动从其位置发射出烟雾粒子。
使用脚本控制粒子系统
通过 C# 脚本,你可以实现动态控制。
-
获取粒子系统引用:
using UnityEngine; public class ParticleController : MonoBehaviour { private ParticleSystem myParticleSystem; void Start() { // 获取此 GameObject 上的粒子系统组件 myParticleSystem = GetComponent<ParticleSystem>(); } void Update() { // 示例:按下空格键,触发一次爆发 if (Input.GetKeyDown(KeyCode.Space)) { var emission = myParticleSystem.emission; emission.SetBurst(0, new ParticleSystem.Burst(1, 50)); // 第0个爆发,在0秒后发射50个粒子 } // 示例:按下 P 键,暂停/恢复播放 if (Input.GetKeyDown(KeyCode.P)) { if (myParticleSystem.isPaused) { myParticleSystem.Play(); } else { myParticleSystem.Pause(); } } } } -
通过脚本修改粒子属性: 你可以通过代码获取并修改粒子系统的各种模块参数,实现动态变化。
第四部分:性能优化与最佳实践
粒子特效非常消耗性能,尤其是在移动设备上,遵循以下原则可以显著提升性能。
- 使用 Billboard (广告牌): 尽可能使用
Billboard渲染模式,它比渲染 3D 网格粒子快得多。 - 控制粒子数量: 这是最重要的一点,在性能分析器中查看
Particles的 Draw Call 和粒子数量,不要无节制地发射粒子。 - 使用简单的材质: 避免在粒子材质上使用复杂的着色器,如包含复杂光照、法线贴图或阴影的着色器。
Unlit/Transparent或Particles/Standard Unlit是很好的选择。 - 优化粒子生命周期: 尽量让粒子在生命周期结束时自然消失,而不是通过销毁粒子系统来停止,频繁地创建和销毁粒子系统开销很大。
- 使用对象池: 如果你的特效是频繁触发的(如每次射击都有枪口火焰),不要每次都 Instantiate 一个新的粒子系统,使用对象池技术来复用它们。
- 利用 LOD (Level of Detail): 为粒子系统创建多个版本(高、中、低),根据摄像机距离切换使用哪个版本。
- 减少模拟空间: 如果粒子效果是绑定在某个物体上的(如角色身上的披风),尽量使用
Local模拟空间,这比World空间更高效。
第五部分:资源推荐与总结
资源推荐
- Unity 官方示例: Unity Asset Store 中有大量的免费和付费粒子特效示例,是学习的好材料。
- YouTube 教程频道:
- Brackeys: 虽然已停止更新,但他的粒子系统教程非常经典易懂。
- Vertex: 专注于游戏开发,有很多高质量的特效制作教程。
- Jason Weimann: 讲解深入,适合想深入了解原理的开发者。
- Asset Store 资源包:
- Crest (海洋系统): 一个展示粒子系统强大能力的顶级项目。
- 各种特效工具包: 如 "Magic Effects Pack", "Cyberpunk Effects Pack" 等,可以直接使用或作为学习参考。
粒子系统是一个“参数艺术”工具,没有绝对的“正确”设置,只有“适合”的设置,最好的学习方法是:
- 理解基础: 熟悉每个模块的作用。
- 动手实践: 从模仿开始,尝试复刻你喜欢的游戏特效。
- 不断实验: 调整每一个参数,观察它带来的变化,这是最快的学习方式。
- 时刻关注性能: 在追求视觉效果的同时,永远不要忘记性能优化。
希望这份教程能帮助你打开 Unity 粒子特效的大门,祝你创作出令人惊艳的视觉特效!
