浅谈unity粒子系统

2015年01月17日 16:14 0 点赞 0 评论 更新于 2025-11-21 14:37

在Unity开发领域,粒子系统是一项广为人知且功能强大的工具,它能够为游戏画面带来意想不到的视觉效果。本文将深入探讨Unity粒子系统的相关知识。

粒子系统概述

粒子系统本质上是在三维空间中渲染出来的二维图像,常用于模拟烟、火、水滴、落叶等自然或奇幻效果。一个完整的粒子系统主要由粒子发射器、粒子动画器和粒子渲染器三个独立部分组成。

在Unity中,自带了一些粒子效果资源。用户可以通过Assets > ImportPackage > Particles路径,将Particles.UnityPackage导入到项目中。这些预制的粒子效果包括沙尘(Dust)、火焰(Fire)、水(Water)、烟雾(Smoke)、闪光(Sparkles)等,此外还有一些粒子资源如Sources、Misc(杂项)。用户可以直接将这些效果拖入场景中使用。

Unity3D中的旧版粒子系统

在Unity3D中,旧版粒子系统需要通过创建一个空的GameObject,并为其添加以下五个组件来实现特定的粒子效果。

1. 椭球粒子发射器(Ellipsoid Particle Emitter)

椭球粒子发射器可在一个椭球范围内生成大量的粒子,用户可以通过Ellipsoid属性对其进行缩放和拉伸。以下是该组件的主要属性:

  • Emit:控制粒子发射。开启此选项后,发射器将开始发射粒子。
  • Min/Max Size:定义生成的每颗粒子的最小和最大尺寸。例如,较小的尺寸可以模拟萤火虫或天空中的星星。
  • Min/Max Energy:表示每颗粒子的最小和最大生命周期(以秒为单位)。
  • Min/Max Emission:指定每秒生成粒子的最小和最大数目。
  • World Velocity:粒子在世界坐标中沿xyz方向的初始速度。
  • Local Velocity:以某个对象为参照物,粒子相对沿着xyz方向的初始速度。
  • Rnd Velocity:随机速度,为粒子赋予随机的初始速度。
  • Emitter Velocity Scale:发射速度比例,用于调整粒子发射的速度。
  • Tangent Velocity:切线速度,即粒子在穿过发射器表面时,沿XYZ轴的初始速度。
  • Angular Velocity:角速度,新生粒子的旋转速度,单位为度每秒(°/s)。
  • Rnd Angular Velocity:随机角速度,使粒子的旋转速度具有随机性。
  • Rnd Rotation:随机旋转,启用后粒子会以随机的方向生成。
  • Simulate in World space:决定是否在世界坐标空间中更新粒子运动。若关闭该选项,每个粒子的位置会随着发射器的位置变化而发生相对运动;若开启,则粒子不受发射器运动的影响。例如,对于一个上升的火球,开启此选项后,火焰会在产生后向上漂浮并逐渐远离火球;关闭此选项,火焰会随着火球在屏幕上移动。
  • One Shot:单次发射。启用该属性时,发射器将在Emission属性内一次性生成所有粒子,然后停止发射,常用于模拟爆炸、水花四溅、魔法效果等;关闭该属性则适用于模拟枪管的烟、风、瀑布等持续效果。
  • Ellipsoid:根据XYZ轴设置粒子的生成范围。
  • Min Emitter Range:最小发射器的范围。

细节说明:椭球粒子发射器是最基本的粒子发射器,添加到场景后,可以定义粒子的边界并给出粒子的初始速度。配合Particle Animator(粒子动画器),可以操纵粒子随时间不断变化,实现各种想要的效果。当需要表现不同的粒子时,可分别调整SizeEnergyEmission以及Velocity属性。同时,要谨慎使用大量粒子效果,因为粒子数量越多,对硬件设备的要求就越高,应尽量用最少的粒子实现所需效果。此外,Emit属性要与粒子动画器中的AutoDestruct(自动销毁)属性相结合使用,通过脚本可以使发射器停止发射粒子,然后自动销毁功能会自动销毁粒子系统以及它所绑定的游戏对象。

2. 网格粒子发射器(Mesh Particle Emitter)

网格粒子发射器在一个网格周围发射粒子,粒子从网格的表面开始生成,部分属性与椭球粒子发射器相同。其主要属性如下:

  • Interpolate Triangles:插值三角形。开启该项后,粒子会在网格的表面生成;关闭该项,粒子则会在网格的顶点处生成。
  • Systematic:系统性,粒子会按照网格定义好的顶点顺序来生成。
  • Min/Max Normal Velocity:最小和最大法线速度,控制从网格抛出粒子的数量范围。
  • Mesh:可点击圆圈按钮Select Mesh选择不同的网格,不同的网格会使粒子的发射初始形态不同。

细节说明:当需要更精确地控制粒子生成的位置和方向时,网格粒子发射器比椭球发射器更加简单,可用于创造更高级的效果。由于网格粒子发射器通过附加在网格上的顶点来发射粒子,因此网格区域的多边形越密集,粒子的发射也就越密集。

3. 粒子动画器(Particle Animator)

粒子动画器使粒子随着时间而运动,可对粒子系统添加风、拖放和颜色循环等效果。以下是其主要属性:

  • Does Animation Color:使用颜色的动画,开启后粒子在其生命周期内会循环变化颜色。
  • Color Animation:颜色动画,可定义五种颜色,使所有的粒子循环使用这些颜色。
  • World Rotation Axis:使粒子围绕世界坐标局部旋转,可用于创造高阶的法术效果。
  • Local Rotation Axis:局部旋转轴,粒子围绕着局部坐标来旋转。
  • Size Grow:粒子会随着时间变化而变大。
  • Rnd Force:随机外力,每一帧都随机施加一个外力。
  • Force:外力,每一帧都给粒子施加外力。
  • Damping:阻尼,控制每一帧有多少粒子的速度会减慢。当值设为1时,没有阻尼,粒子的速度不会减慢。
  • Autodestruct:自动销毁,启用后,所有消失的粒子在销毁时会同时销毁为其绑定的游戏对象。

细节说明

  • Rotation Axes:旋转轴,无论是设置局部还是世界坐标旋转轴,都会使粒子围绕指定的轴旋转。数值越大,旋转越快。设置为局部旋转时,改变的是Transform组件的Rotation属性;设置为世界坐标旋转时,粒子的旋转轴始终不变。
  • Forces & Damping:外力和阻尼,利用外力可使粒子在方向上产生加速,阻尼可在粒子不改变方向的情况下使其加速或减速。值为1表示没有阻尼,粒子不会加速或减速;值为0表示粒子会立即停止;值为2表示每秒粒子的速度都会加倍。
  • Destroying GameObjects attached to Particles:销毁绑定到粒子的对象。例如,对于一个油桶爆炸的效果,可将一个Emit属性被禁用的爆炸粒子效果附加到油桶上,同时开启这个爆炸粒子的Autodestruct属性。在发生碰撞时开启Emitter属性(即开启粒子发射器播放爆炸效果),爆炸效果结束后,油桶会随着粒子的生命周期一并销毁。

4. 世界坐标粒子碰撞器(World Particle Collider)

世界坐标粒子碰撞器可以使粒子与场景中其他的碰撞体发生碰撞。其主要属性如下:

  • Bounce Factor:弹性系数,粒子与其他对象发生碰撞时会使其加速或减速,该属性与粒子动画器的组件的Damping(阻尼)属性相类似。
  • Collision Energy Loss:碰撞活力损失,当发生碰撞时粒子每秒损失的活力总和,小于0时粒子销毁。
  • Collides with:碰撞对象,决定粒子与哪一个层级发生碰撞。
  • Send Collision Message:发生碰撞消息,开启该项后,每个粒子都会发送一个碰撞消息,可通过脚本捕获到该消息。
  • Min Kill Velocity:最小消灭速度,如果一个粒子因为碰撞而使速度降到最小消灭速度,它将被销毁。

细节说明:若开启Send Collision Message,在碰撞中任何粒子都会发送消息OnParticleCollision到粒子绑定的对象和与粒子相碰撞的对象。需要注意的是,Send Collision Message可用作模拟子弹和冲击伤害,但当有许多粒子时,碰撞检测会变得缓慢,且消息发送会占用大量的资源消耗,因此要适当地使用粒子碰撞,尽量不要将其用于大规模的粒子系统中。

5. 粒子渲染器(Particle Renderer)

粒子渲染器可将粒子渲染到屏幕上,没有粒子渲染器就无法看到粒子效果。其主要属性如下:

  • Cast Shadows:开启该项,粒子可产生阴影。
  • Receive Shadows:开启该项,粒子可接收阴影。
  • Materials:可将指定的材质显示到每个粒子的位置,可调整Size参数来添加粒子类型。
  • Use Light Probes:使用光线探测,开启后则烘培过的光线探测可显示在场景中,它是一个插值光线探测。
  • Light Probe Anchor:光线探测探测锚点,开启后渲染器会通过Transform组件的位置来寻找插值光线探测。
  • Camera Velocity Scale:相机速度比例,应用到基于相机运动的粒子的延伸总量。
  • Stretch Particle:粒子伸展,该属性决定了粒子的渲染方式。
  • Billboard:公告板,粒子被渲染为面向Camera的方向。
  • Sorted Billboard:分类公告板,粒子按照深度进行分类,使用混合材质时用到该项。
  • Stretched:伸展,粒子面向其正在运动的方向。
  • Horizontal Billboard:水平公告板,所有粒子沿着XY轴平面对齐。
  • Vertical Billboard:垂直公告板,所有粒子沿着XZ轴的平面对齐。
  • Length Scale:长度比例,如果Stretch Particles设置为伸展,那么此值可以决定粒子在其运动方向上的长度。
  • Velocity Scale:速度比例。
  • Max Particle Size:最大粒子大小,决定在屏幕上显示粒子的大小,1覆盖整个视图,0.5覆盖一半的视图。
  • UV Animation:UV动画,如果有一项被设置,则通过使用平铺纹理来生成粒子的UV坐标。
  • X TileX轴向上的平铺数。
  • Y TileY轴向上的平铺数。
  • Cycles:动画序列循环的次数。

细节说明

  • 选择材质:当建立一个粒子渲染器时,使用适当的材质及可双面渲染材质着色器非常重要,大部分时候所要使用的材质都有一个内置的粒子着色器。
  • 扭曲粒子:默认情况下,粒子以Billboarded的方式进行渲染,适用于表现烟雾、爆炸等效果。粒子可以任何速度向任何方向伸展,对于火花、闪电、光束等效果非常有用。
  • 动画纹理:粒子系统可通过一个动画平铺贴图来渲染。要使用此功能,应保持在图像的节点之外。当粒子按其生命周期循环时,也会连同图像一起进行循环,这对于给粒子增加更多的生命周期或者制作小的旋转碎片非常有用。

总结

通过以上对Unity粒子系统的介绍,相信读者对其有了更深入的了解。读者可以尝试利用这些知识,制作爆炸效果、下雨、下雪等场景,为游戏增添更多的视觉魅力。同时,在实际开发中,要根据硬件性能合理使用粒子效果,以达到最佳的游戏体验。

作者信息

feifeila

feifeila

共发布了 3994 篇文章