目录

1 Particle System 粒子系统

1.1 主模块

1.2 Emission模块

1.2.1 持续发射

1.2.2 爆发发射

1.3 Velocity over Lifetime模块

1.4 Limit Velocity over Lifetime模块

1.5 Inherit Velocity模块

1.6 Lifetime By Emitter Speed模块

1.7 Force Over Lifetime模块

1.8 Color over Lifetime模块

1.9 Color by Speed模块

1.10 Size over Lifetime模块

1.11 Size by Speed模块

1.12 Rotation over Lifetime模块

1.13 Rotation by Speed模块

1.14 External Forces模块

1.15 Noise模块

1.16 Collision模块

1.17 Triggers模块

1.18 Sub Emitters模块

1.19 Texture Sheet Animation模块

1.20  Lights模块

1.21 Trails模块

1.22 Custom Data模块

1.23 Renderer模块

2 Line Renderer 线段渲染器

2.1 属性介绍

2.2 基本用法与脚本控制

3 Trail Renderer拖尾渲染器

3.1 属性介绍

3.2 基本方法与脚本控制


Unity 的特效系统是提升游戏视觉表现力的核心工具,主要包含 粒子系统(Particle System)线段渲染器(Line Renderer)拖尾渲染器(Trail Renderer) 三大核心组件。

三者定位不同:粒子系统适合模拟离散粒子(火焰、雨水),线段渲染器适合绘制连续线段(激光、绳索),拖尾渲染器适合跟随物体生成轨迹(尾气、技能轨迹)。


1 Particle System 粒子系统

粒子系统是Unity特效系统中功能最强大、最复杂的部分,用于模拟和渲染大量微小的、移动的图像(粒子)来表现如火焰、烟雾、爆炸、魔法、雨水等复杂现象。每个粒子都有独立的生命周期(出生→存活→死亡),并可配置位置、速度、颜色、大小等属性。

核心概念与结构

Unity的粒子系统采用模块化设计。一个基本的粒子系统默认包含 主模块(Main),其他模块需手动启用(勾选模块名称)。

创建方式:GameObject -> Effects -> Particle System

1.1 主模块

(1)Duration(持续时间)

  • 说明: 粒子系统单次循环的播放时长(以秒为单位)。

  • 效果: 设置为5,意味着发射器会持续发射5秒,然后(如果启用了循环)会重新开始。

  • 用途: 控制效果的总体长度。例如,一个短暂的爆炸效果Duration可能只有1-2秒,而一个持续的环境烟雾效果可能设置为10秒或更长。

(2)Looping(循环)

  • 说明: 布尔值(勾选框)。决定粒子系统在持续时间结束后是否重新开始。

  • 效果: 勾选后,效果会无限循环播放;取消勾选,则只播放一次。

  • 用途: 用于需要持续不断的效果,如瀑布、火焰、星辰背景。对于一次性效果如爆炸、施法,则取消循环。

(3)Prewarm(预热)

  • 说明: 布尔值。仅在启用Looping时可用。如果启用,系统在游戏开始时就好像已经运行了一个完整的循环。

  • 效果: 场景一加载,你就能看到一个"成熟"的、已经处于稳定状态的效果,而不是从零开始发射粒子。

  • 用途: 非常适合需要从一开始就"满状态"的循环效果,比如一个已经燃烧旺盛的篝火,或者一个已经充满烟雾的房间。

(4)Start Delay(起始延迟)

  • 说明: 粒子系统开始发射粒子前等待的时间(秒)。

  • 效果: 系统激活后,会等待指定的时间再开始发射。

  • 用途: 用于错开多个粒子系统的启动时间,或者制作一些触发式效果(如走进感应区后稍等片刻再喷出火焰)。

(5)Start Lifetime(初始生命周期)

  • 说明: 粒子从出生到消亡所持续的秒数。

  • 控制方式

    • 常数: 固定值,如5秒。

    • 在两个常数间随机: 在两个值之间取随机值,使粒子消亡时间不同,效果更自然。

    • 曲线: 根据时间或粒子自身寿命来定义复杂的变化。

  • 用途: 控制粒子存留的时间。短生命周期用于火花,长生命周期用于漂浮的尘埃。

(6)Start Speed(初始速度)

  • 说明: 粒子出生时沿其运动方向的速度大小。

  • 控制方式: 常数、随机或曲线。

  • 用途: 控制粒子移动的快慢。高速用于子弹轨迹、爆炸碎片;低速或0用于漂浮的烟雾、云雾。

(7)Start Size(初始大小)

  • 说明: 粒子出生时的大小(缩放)。

控制方式: 常数、随机或曲线。

  • 用途: 创建大小不一的粒子,增加视觉效果的自然感和丰富性。例如,烟雾粒子可以有不同的大小。

3D Start Size(3D起始大小)

  • 说明:默认情况下,Start Size是均匀缩放粒子的。启用3D Start Size后,你可以分别设置粒子在X、Y、Z轴上的大小,从而可以制作出非均匀缩放的粒子,比如椭圆形的气泡或片状的树叶。
  • 控制方式:可以分别对X、Y、Z轴设置常数、随机值或曲线。
  • 用途:当需要粒子在不同方向上具有不同大小时使用。例如,一个扁平的光盘状粒子,可以设置X和Z轴大小相同,而Y轴很小。

(8)Start Rotation(初始旋转)

  • 说明: 粒子出生时的旋转角度(度)。

  • 控制方式: 常数、随机或曲线。

  • 用途: 当粒子使用的纹理不是圆形时(如星星、叶片),此属性可以随机化或固定它们的朝向,避免所有粒子看起来一模一样。

3D Start Rotation(3D起始旋转)

  • 说明:默认的Start Rotation是绕Z轴旋转(2D旋转)。启用3D Start Rotation后,你可以分别设置粒子绕X、Y、Z轴的旋转(欧拉角)。这对于在3D空间中任意朝向的粒子非常有用。

  • 控制方式:可以分别对X、Y、Z轴设置常数、随机值或曲线。

  • 用途:当需要粒子在3D空间中具有任意朝向时使用。例如,随机旋转的立方体粒子,或者需要让粒子始终朝向某个方向(如广告牌Billboard)时,可以通过3D旋转调整初始朝向。

Flip Rotation(翻转旋转)

  • 说明:此属性用于随机翻转粒子的旋转方向。它有两个选项:

    • Flip Rotation:一个0到1的值,表示翻转旋转的概率。0表示不翻转,1表示总是翻转。

    • Flip Rotation Ratio:与Flip Rotation相同,但使用比率表示。

  • 效果:当粒子有旋转时,一部分粒子会朝相反方向旋转,增加随机性。

  • 用途:用于模拟自然现象,比如一群粒子中有些顺时针旋转,有些逆时针旋转,使得效果更自然。

(9)Start Color(初始颜色)

  • 说明: 粒子出生时的颜色。

  • 控制方式

    • 常数: 固定颜色。

    • 渐变: 在指定的颜色渐变中随机选取。

    • 两个渐变间随机: 在两个颜色渐变之间随机选取。

    • 两个颜色间随机: 在两个HSV颜色空间的值之间随机选取。

  • 用途: 定义粒子的基础色调。例如,火焰可以使用从黄色到红色的渐变。

(10)Gravity Modifier(重力修正器)

  • 说明: 粒子在模拟过程中受到重力影响的缩放因子。

  • 效果: 0表示完全不受重力影响;1表示受到Physics窗口中设置的全局重力的完全影响;负值会使粒子向上运动。

  • 控制方式: 常数、随机或曲线。

  • 用途: 模拟下落的雨水(正值)、上升的烟雾(负值或很小的正值)或不受重力影响的魔法能量(0)。

Gravity Source(重力源)

  • 说明:指定粒子所受重力的来源。选项包括:

    • Physics Gravity:使用Unity物理引擎设置的重力(Edit -> Project Settings -> Physics 中设置)。

    • Custom:自定义重力,可以在下方指定一个重力向量。

  • 用途:当你希望粒子使用非物理引擎的重力时,比如一个侧向的重力或者更强的重力,可以选择自定义。

(11)Simulation Space(模拟空间)

  • 说明: 决定粒子在哪个坐标系下进行模拟。

  • 选项

    • Local(局部空间): 粒子相对于其父级粒子系统变换来移动。如果移动发射器,所有已发射的粒子也会跟着移动。

      • 用途: 附着在移动物体上的效果,如汽车尾气、角色脚下的光环。

    • World(世界空间): 粒子在世界坐标系中独立移动。如果移动发射器,已发射的粒子会留在原地。

      • 用途: 世界中的静态效果,如篝火、瀑布;或者从移动物体上脱离的效果,如子弹轨迹、跳跃时掉落的尘土。

    • Custom(自定义): 允许你指定一个自定义的Transform作为模拟空间。

  • 重要区别: 这是理解粒子运动的关键概念!

(12)Simulation Speed(模拟速度)

  • 说明: 缩放整个粒子系统更新速度的乘数。

  • 效果: 1为正常速度;2为两倍速;0.5为半速;0为暂停。

  • 用途: 可以用来制作慢动作或快进特效。

(13)Delta Time(增量时间)

  • 说明: 粒子系统更新时使用的时间尺度。

  • 选项

    • Scaled(缩放时间): 使用 Time.timeScale。当游戏暂停(Time.timeScale = 0)时,粒子系统也会暂停。

    • Unscaled(非缩放时间): 使用真实的、不受缩放影响的时间。即使游戏暂停,粒子系统也会继续播放。

  • 用途: 对于UI上的特效或暂停菜单中的背景效果,通常需要使用 UnScaled。

(14)Scaling Mode(缩放模式)

  • 说明: 决定粒子系统的变换缩放如何影响粒子。

  • 选项

    • Hierarchy(层级): 粒子会受到其自身及其所有父级GameObject缩放的影响。

    • Local(局部): 粒子只受其自身粒子系统变换组件上缩放的影响。

    • Shape(形状): 缩放只影响初始发射器的形状,而不影响粒子本身的大小。

  • 用途: 当你想通过缩放父物体来整体控制特效大小时,使用 Hierarchy;当你想保持粒子大小不变,只改变发射范围时,使用 Shape。

(15)Play On Awake(唤醒时播放)

  • 说明: 布尔值。如果启用,当包含粒子系统的游戏对象被实例化时,系统会自动开始播放。

  • 效果: 这是最常用的设置。如果取消勾选,你需要通过脚本(例如 GetComponent<ParticleSystem>().Play())来手动启动它。

  • 用途: 对于需要由玩家行为触发的效果(如点击按钮后出现的特效),需要取消勾选此选项。

(16)Emitter Velocity Mode(发射器速度模式)

  • 说明: 决定粒子在出生时,如何继承发射器(即粒子系统所在GameObject)的运动速度。

  • 选项

    • Transform(变换): 默认选项。根据发射器Transform组件的位置变化来计算速度。适用于大多数情况。

    • Rigidbody(刚体): 如果发射器附带了Rigidbody组件,则使用刚体的速度。这能提供更精确的物理速度,尤其是在有碰撞和物理力作用的情况下。

  • 用途

    • 当发射器由物理引擎(如Rigidbody)驱动时(例如一个被扔出去的手雷),使用 Rigidbody模式可以让产生的粒子(如烟雾)更准确地继承发射器的物理速度,效果更真实。

(17)Max Particles(最大粒子数)

  • 说明: 系统允许同时存活的粒子的最大数量。

  • 效果: 当达到此限制时,系统会停止发射新粒子,直到有旧的粒子消亡。

  • 用途: 这是性能优化的关键属性! 限制粒子数量可以防止性能下降。你需要根据效果需求找到一个平衡点。一个复杂的魔法效果可能需要1000个粒子,而简单的火花可能只需要50个。

(18)Auto Random Seed(自动随机种子)

  • 说明: 布尔值。控制粒子系统是否在每次播放时自动生成一个新的随机种子

  • 效果

    • 启用(默认): 每次播放粒子系统(如重新加载场景、通过脚本调用 Play()),粒子的随机行为(如初始大小、颜色、旋转的随机值)都会不同。每次效果都有细微差别。

    • 禁用: 粒子系统会使用一个固定的随机种子。这意味着每次播放,粒子的所有随机行为都将是完全一致、可重复的

  • 用途

    • 禁用此选项对于需要确保效果一致性的场景至关重要,例如在过场动画、录制视频或需要精确同步的多人游戏中。

    • 启用此选项则用于追求自然变化的一般游戏效果。

(19)Stop Action(停止动作)

  • 说明: 定义当粒子系统停止运行(不是单个粒子消亡)时,对仍然存活的粒子执行的操作。

  • 选项

    • None(无): 什么都不做。粒子会继续完成它们的生命周期然后自然消失。

    • Disable(禁用): 最常用。立即禁用整个粒子系统GameObject。所有粒子会瞬间消失。

    • Destroy(销毁): 销毁整个粒子系统GameObject。

    • Callback(回调): 粒子系统停止时,会向所有脚本发送一个 OnParticleSystemStopped() 消息,你可以在脚本中捕获这个事件并执行自定义逻辑。

  • 用途

    • 控制粒子系统结束时的行为。例如,一个爆炸效果播放完毕后,你希望它立即消失,就设置为 Disable。

(20)Culling Mode(剔除模式)

  • 说明: 决定当粒子系统不在任何摄像机的视野内时,它的模拟行为。

  • 选项

    • Automatic(自动): Unity会自动在 Pause和 Pause and Catch-up之间选择。

    • Pause and Catch-up(暂停并追赶): 当粒子系统不可见时,暂停模拟。当它再次变为可见时,会快速模拟("追赶")它在不可见期间应该发生的状态。这可以防止效果"丢失"一段时间,但可能会在重新出现时造成一帧的性能峰值。

    • Pause(暂停): 当不可见时,暂停模拟。当再次可见时,从暂停的地方继续模拟。效果会"跳过"不可见期间的时间,导致行为不连续。

    • Always Simulate(始终模拟): 无论是否可见,粒子系统都会持续模拟。这是最准确但性能开销最大的选项。

  • 用途

    • 性能优化关键!对于大多数不在视野内就不重要的效果,使用 Pause and Catch-up或 Pause可以显著节省CPU开销。

    • 对于即使不可见也必须精确模拟的效果(例如,其粒子会影响游戏逻辑),则使用 Always Simulate。

(21) Ring Buffer Mode(环形缓冲区模式)

  • 说明: 一种特殊的粒子管理模式。它不会让粒子在生命周期结束时被销毁,而是在粒子达到最大数量后,重用最早生成的粒子

  • 选项

    • Disabled(禁用): 默认模式,不使用环形缓冲区。

    • Loop Until Replaced(循环直到被替换): 粒子会循环直到被新粒子替换。

    • Loop(循环): 粒子在生命周期结束后立即重生。

  • 用途与效果

    • 它绕过了 Start Lifetime和 max Particles的常规限制。

    • 用于创建固定数量的、持续存在的粒子组成的效果。

    • 经典用例: 创建一个由固定数量的粒子组成的"星座"或"魔法阵"图案,这些粒子永远存在,并在系统需要新粒子时被重新分配位置,而不是消失和重生。它更侧重于粒子的存在而非粒子的生命周期


1.2 Emission模块

Emission模块主要分为两大部分:持续发射 和 爆发发射

1.2.1 持续发射

(1)Rate over Time(随时间发射速率)

  • 说明: 定义每秒发射的粒子数量。

  • 控制方式

    • 常数: 固定发射速率,如10个/秒。

    • 随机 Between Two Constants: 在两个值之间随机,例如5-15个/秒,使发射率有波动,更自然。

    • 曲线 : 根据粒子系统已运行的时间来定义发射速率的变化曲线。

  • 效果: 这是最常用的发射方式。一个稳定的数值可以创建持续的效果(如火焰),而一条曲线可以制作出先增强后减弱的喷射效果。

  • 用途: 几乎所有需要持续产生的效果,如烟雾、火焰、瀑布、雨水。

(2)Rate over Distance(随距离发射速率)

  • 说明: 定义发射器每移动一个单位距离所发射的粒子数量。

  • 控制方式: 常数、随机或曲线。

  • 效果

    • 当发射器静止时,不会发射任何粒子

    • 当发射器移动时,会根据移动的距离来发射粒子。移动越快,单位时间内发射的粒子越多。

  • 用途

    • 移动物体留下的轨迹: 如汽车轮胎扬起的尘土、角色奔跑时脚后扬起的雪花、飞船穿越星云时激起的粒子。

    • 替代拖尾渲染器: 在某些情况下,可以用此方式配合短生命周期粒子来模拟拖尾效果,更具灵活性。

1.2.2 爆发发射

Bursts允许你在粒子系统生命周期的特定时间点瞬间发射指定数量的粒子。

要添加一个爆发,点击Bursts列表右下角的 + 号。

(3)Time(时间)

  • 说明: 爆发发生的时间点(以秒为单位),从粒子系统开始播放时计算。

  • 细节

    • 如果粒子系统是非循环的,时间范围是0到Duration(主模块的持续时间)。

    • 如果粒子系统是循环的,时间是指每个循环周期内的时间点。例如,在一个10秒的循环中,时间5表示在每个循环的第5秒都会触发一次爆发。

  • 用途: 精确控制爆发在何时发生。

(4)Count(数量)

  • 说明: 在指定时间点瞬间发射的粒子数量。

  • 控制方式

    • 常数: 固定数量,如30个。

    • 随机 between two constants: 在两个值之间随机,例如25-35个。

    • 曲线: 根据一个标准化曲线(0到1)来取值,较少使用。

  • 用途: 控制爆发的强度。

(5)Cycles(循环次数)

  • 说明: 该爆发事件总共要重复执行多少次

  • 选项

    • 0 或更小: 无限重复(每个循环都会触发)。

    • 1: 只触发一次(默认)。

    • 任何大于1的整数: 触发指定次数后停止。

  • 用途: 制作一个只在开头几次循环中出现的爆发效果。例如,一个引擎启动效果,只在最初的三次循环中喷出浓烟,之后恢复正常。

(6)Interval(间隔)

  • 说明: 仅在Cycles大于1时可用。它定义了每次爆发重复触发之间的时间间隔(秒)

  • 效果: 假设 Time=0, Cycles=3, Interval=1,那么爆发会在以下时间点触发:0.0秒, 1.0秒, 2.0秒。

  • 用途: 用于创建有规律的脉冲式爆发,如机关枪射击(每次射击都是一个爆发)、心脏跳动、周期性闪烁的魔法能量。

(7)Probability(概率)

  • 说明: 仅在Cycles大于1时可用。它定义了每次循环时,该爆发事件实际触发的概率

  • 范围: 0.0 到 1.0。

    • 1: 100%触发(总是触发)。

    • 0.5: 50%的几率触发。

    • 0: 0%几率触发(永远不会触发)。

  • 用途: 为重复的爆发添加随机性,使其不那么规律和可预测。例如,一个偶尔会喷出大火花的熔岩池。


1.3 Velocity over Lifetime模块

(1)Linear XYZ速度分量)

  • 说明: 分别在X、Y、Z轴上为粒子添加一个持续的速度。这个速度会与粒子已有的速度(来自主模块的Start Speed或其他力)进行叠加

  • 控制方式

    • 常数: 固定速度值,如在Y轴上设置5,粒子会持续获得向上(Y轴正方向)的速度。

    • 随机 between two constants: 在两个值之间随机,为每个粒子赋予不同的持续速度。

    • 曲线 over Lifetime: 根据粒子生命周期的进度(从0到1)来定义速度的变化。例如,让粒子在生命初期加速,中期保持,末期减速。

  • 用途

    • 恒定力场: 模拟持续的风力(X轴速度)、浮力(Y轴速度)等。

    • 螺旋运动: 结合X和Z轴的曲线控制,可以让粒子做圆周或螺旋运动。

    • 示例: 制作烟雾,可以在Y轴上设置一个较小的正值模拟浮力,同时在X和Z轴上添加一点噪声曲线,让烟雾缭绕上升。

(2)Space(空间)

  • 说明: 决定上述X, Y, Z速度值是应用在哪个坐标系下。

  • 选项

    • Local(局部空间): 速度方向相对于粒子系统的局部坐标系。如果旋转粒子系统,速度方向也会随之改变。

    • World(世界空间): 速度方向在世界坐标系中保持不变,不受粒子系统旋转的影响。

  • 用途

    • 使用 Local 空间可以创建跟随发射器方向的效果,如从旋转的喷头喷出的水。

    • 使用 World 空间可以创建全局的环境效果,如始终从西向东吹的风。

(3)Orbital(轨道速度)

  • 说明: 让粒子绕着指定的轴(通过下面的Axis属性设置)进行旋转(轨道运动)。

  • 控制方式: 常数、随机或曲线。值表示轨道速度的大小。

  • 效果: 与Tangential不同,Orbital是围绕一个全局的轴,而Tangential是围绕一个径向中心点

  • 用途

    • 模拟粒子围绕一个轴旋转,例如电子围绕原子核旋转,或者创造一个圆柱形的粒子屏障。

(4)Offset(偏移)

  • 说明: 仅用于RadialTangential模式。用于调整径向和切向速度计算所依据的中心点位置

  • 控制方式: 通过X, Y, Z三个分量设置一个偏移向量。

  • 效果: 默认情况下,Radial和Tangential的中心点是粒子系统的局部原点(0,0,0)。通过Offset,你可以将这个中心点移动到其他位置。

  • 用途

    • 当你希望粒子从一个非原点的特定点开始径向或切向运动时使用。例如,制作一个从屏幕右侧某点产生的爆炸,你可以将Offset设置为该点的局部坐标。

(5)Radial(径向速度)

  • 说明: 使粒子沿着从指定中心点指向粒子当前位置的方向运动。

  • 控制方式: 常数、随机或曲线。值表示径向速度的大小。

    • 正值: 粒子远离中心点。

    • 负值: 粒子朝向中心点运动。

  • 用途

    • 爆炸: 使用较大的正值,模拟碎片从中心向外飞散。

    • 黑洞/引力源: 使用负值,模拟粒子被吸入一个中心点。

    • 能量球: 使用一个较小的正值,让粒子缓慢地从中心向外扩散。

(6)Speed Modifier(速度修正器)

  • 说明: 这是一个乘性因子,用于缩放粒子当前的总速度(包括主模块的Start Speed、Velocity over Lifetime的其他分量等)。

  • 控制方式: 常数、随机或曲线。

  • 效果

    • 1.0: 不改变速度。

    • 2.0: 速度变为两倍。

    • 0.5: 速度减半。

    • 0.0: 粒子瞬间停止。

    • -1.0: 粒子瞬间反向。

  • 用途

    • 模拟阻力: 使用一条从1到0的下降曲线,让粒子在整个生命周期中逐渐减速至停止。

    • 模拟爆炸冲击波: 使用一条先急剧上升再下降的曲线,让粒子瞬间获得巨大速度然后迅速慢下来。

    • 紧急制动: 在生命后期突然将速度降为0。

经典组合示例

  1. 爆炸碎片

    • 主模块: 较高的Start Speed让碎片获得初始动能。

    • Velocity over Lifetime

      • Radial: 一个较大的正值,模拟冲击波。

      • Speed Modifier: 一条从1到0的陡峭曲线,模拟空气阻力使碎片迅速减速。

  2. 龙卷风/涡旋

    • Velocity over Lifetime

      • Radial: 一个较小的负值,将粒子向中心拉动。

      • Tangential: 一个较大的正值,让粒子快速旋转。

      • Y (World Space): 一个正值,让涡旋整体向上移动。

  3. 魔法能量球

    • Velocity over Lifetime

      • Radial: 一个很小的正值,让能量微微向外扩散。

      • Orbital (Y轴): 一个常数,让所有粒子缓慢地围绕Y轴旋转。

通过灵活组合Velocity over Lifetime模块的这些属性,你可以精确地控制每一个粒子的运动轨迹,从简单的直线运动到极其复杂的物理模拟,几乎可以创造出你能想象到的任何运动模式。


1.4 Limit Velocity over Lifetime模块

Unity粒子系统的Limit Velocity over Lifetime(生命周期内的速度限制) 模块。这个模块是一个强大的物理模拟工具,用于模拟阻力、摩擦力或任何限制粒子最大速度的效果。

这个模块的核心思想是:当粒子的速度超过你设定的阈值时,系统会施加一个反向的力(阻尼)来降低粒子的速度。

(1)Separate Axes(分离轴)

  • 说明: 布尔值。决定是否分别在X、Y、Z轴上独立设置速度限制

  • 效果

    • 禁用(默认): 使用一个统一的Speed值来限制粒子的整体速度大小

    • 启用: 出现X、Y、Z三个独立的轴,可以分别设置每个轴向上的速度分量限制。

  • 用途

    • 使用统一Speed来模拟各向同性的介质阻力,如水或空气。

    • 使用Separate Axes来模拟非均匀的阻力场,例如只在垂直方向上有强阻力,而在水平方向上阻力较小。

(2)Speed / X, Y, Z(速度/各轴速度限制)

  • 说明: 定义速度限制的阈值。

    • Separate Axes禁用时,显示为Speed,表示粒子速度的最大标量值

    • Separate Axes启用时,显示为X, Y, Z,分别表示在每个轴向上粒子速度分量的最大绝对值

  • 控制方式

    • 常数: 固定限制值。

    • 随机 between two constants: 在两个值之间随机,每个粒子会采用不同的限制值。

    • 曲线 over Lifetime: 根据粒子生命周期的进度来定义限制值的变化。

  • 效果: 如果粒子的速度(或某个轴向的速度分量)超过了设定的限制值,就会触发阻尼效果(见下面的Dampen/Drag)。

  • 用途

    • 模拟终端速度:例如,下落的雨滴或雪花最终会达到一个恒定的最大速度。

    • 防止粒子因多次受力而移动过快,失去控制。

下面属性决定了当粒子超过速度限制时,如何"惩罚"它。

(3)Dampen(阻尼)

  • 说明: 一个0到1之间的值,控制当粒子速度超过限制时,削减其速度的强度

  • 效果

    • 0: 不应用阻尼。即使速度超过限制,也不会减速。

    • 1: 完全阻尼。当速度超过限制时,会立即将速度降至限制值。这是一种非常"强硬"的减速。

    • 中间值: 部分阻尼。按比例削减超出部分的动能。

  • 用途

    • 设置为1可以模拟粒子撞入一个非常粘稠的介质,瞬间减速。

    • 设置为0.5可以创造一个更平滑的减速效果。

(4)Drag(拖动)

  • 说明: 一个0到1之间的值,表示在应用速度限制时,将超出限制的动能转化为拖动力的比例

  • 效果

    • 与Dampen的立即削减不同,Drag更像是施加一个持续的、与速度方向相反的力

    • 当使用Drag时,粒子速度超过限制的部分会被转化为一个反向的力,从而平滑地减速

  • 重要关系

    • Drag和Dampen是互斥的。当Drag大于0时,Dampen将被忽略

    • Unity优先使用Drag。如果Drag为0,则回退到使用Dampen。

  • 用途

    • 模拟空气阻力流体阻力,使粒子的减速过程更加平滑自然。这是模拟真实物理阻力更常用的方法。


(5)Multiply by Size(乘以大小)

  • 说明: 布尔值。如果启用,速度限制会乘以粒子的大小

  • 效果

    • 启用后,较大的粒子可以有较高的速度限制,而较小的粒子则具有较低的速度限制。

    • 这模拟了现实世界中,在相同介质中,较大物体比较小物体更容易维持高速(惯性更大)。

  • 用途

    • 用于创建更自然的效果,例如在爆炸中,较大的碎片比较小的碎片飞得更远、更快。

    • 模拟雨滴或尘埃,其中大小不同的粒子以不同的最大速度下落。

(6)Multiply by Drag(乘以拖动)

  • 说明: 布尔值。如果启用,速度限制会乘以粒子在Physics模块中设置的Drag值

  • 效果

    • 这创建了速度限制与物理拖动之间的关联。

    • 如果一个粒子已经通过Physics模块设置了很高的Drag(表示它受到很大阻力),那么它的速度限制也会相应降低。

  • 用途

    • 用于更高级、更一致的物理模拟,当你想让速度限制与其他物理力协同工作时。


1.5 Inherit Velocity模块

Inherit Velocity(继承速度) 模块。这个模块控制粒子在出生的那一刻,如何从移动的发射器继承速度,这对于创建逼真的移动发射器效果至关重要。

当发射器本身在移动时(比如附着在汽车、角色或飞行物上),这个模块决定了新生成的粒子如何"继承"发射器的运动。

(1)Mode(模式)

  • 说明: 定义继承速度的计算方式和应用时机。

  • 选项

    1. Initial(初始)

    • 说明: 默认模式。粒子只在出生的那一刻继承发射器的速度,并将其作为自己初始速度的一部分

    • 效果: 粒子获得一个一次性的速度加成,之后就不再受发射器当前速度的影响。粒子会按照物理规律(重力、阻力等)继续运动。

    • 用途: 最常用的模式。适用于大多数移动发射器效果,如:

      • 汽车尾气: 粒子出生时带有汽车的速度,然后因为空气阻力而减速。

      • 奔跑时扬起的尘土: 尘土粒子从脚底飞出,带有角色的水平速度。

      • 移动的火箭尾焰: 尾焰粒子出生时继承火箭的速度,但在世界空间中逐渐减速,形成拖尾。

    2. Current(当前)

    • 说明: 在粒子的整个生命周期内,持续地将其速度与发射器的当前速度进行同步。

    • 效果: 粒子会"粘附"在发射器上,始终与发射器保持相对静止的速度。如果发射器加速,粒子也会加速;如果发射器转向,粒子也会跟着改变方向。

    • 用途: 用于创建紧密附着在移动物体表面的效果,而这些效果本身不应该有独立的运动。

      • 物体表面的能量护盾: 护盾粒子应该始终跟随物体移动。

      • 环绕角色的光环: 光环粒子应该持续跟随角色运动。

      • 车轮毂上的特效: 特效应该随着车轮一起旋转。

(2)Multiplier(乘数)

  • 说明: 一个缩放因子,用于控制继承速度的强度

  • 控制方式

    • 常数: 固定缩放值。

    • 随机 between two constants: 在两个值之间随机。

    • 曲线 over Lifetime: 仅当Mode为Current时可用。根据粒子生命周期来调整继承速度的强度。

  • 效果

    • 0.0: 不继承任何速度。粒子出生时相对于发射器静止。

    • 1.0: 完全继承。粒子获得发射器100%的速度。

    • 0.5: 部分继承。粒子获得发射器50%的速度。

    • -1.0: 反向继承。粒子获得与发射器方向相反的速度。

  • 用途

    • 用于微调继承速度的物理真实性。

    • 对于Initial模式,通常设置为1.0以获得最真实的效果。但有时为了艺术表现,可以降低该值(如让尾烟更快地消散)。

    • 对于Current模式,通常设置为1.0以确保完美跟随。使用曲线可以创造有趣的效果,例如让粒子在生命末期逐渐"脱离"发射器(将曲线从1降到0)。

理解Inherit Velocity模块需要结合其他模块:

  • 主模块的 Simulation Space

    • 当使用World 空间时,Inherit Velocity的效果最明显。粒子在世界中独立运动,继承的速度会与粒子自身的运动叠加。

    • 当使用 Local 空间时,发射器的移动本身就带动所有粒子移动,此时 Inherit Velocity的效果可能不那么直观,通常用于在局部空间内添加额外的速度扰动。

  • 主模块的 Emitter Velocity Mode

    • 这个属性决定了Inherit Velocity模块读取的是哪个速度:

      • Transform: 基于Transform组件的位置变化计算速度。适用于大多数情况。

      • Rigidbody: 直接从附加的Rigidbody组件获取速度。当发射器由物理引擎驱动时,这能提供更精确、更平滑的速度数据,对于Inherit Velocity模块至关重要,可以避免因Transform计算的抖动或不连续导致粒子继承速度出现问题。

  • Velocity over Lifetime模块

    • Inherit Velocity提供的速度会与Velocity over Lifetime模块添加的速度进行矢量叠加

经典使用示例

1.完美的汽车尾气(Initial模式)

  • 主模块: Simulation Space = World(这样尾气才会留在世界空间中形成轨迹)。
  • 主模块: Emitter Velocity Mode = Rigidbody(如果汽车由物理驱动,这能获得最平滑的速度)。
  • Inherit Velocity
    • Mode = Initial
    • Multiplier = 1.0(或略低于1.0,如0.8,让尾气更快地被"抛在后面")。
  • 效果: 尾气粒子从排气管喷出,带有汽车的当前速度,然后因为空气阻力迅速减速,形成一条逐渐消散的尾迹。

2.移动的能量护盾(Current模式)

  • 主模块: Simulation Space = Local(护盾可以设计为局部效果)。
  • Inherit Velocity
    • Mode = Current
    • Multiplier = 1.0(确保护盾粒子完美跟随飞船运动)。
  • 效果: 无论飞船如何加速、转向或翻滚,护盾粒子都牢牢地附着在飞船表面。

3.魔法飞弹逐渐脱离引导(Current模式 + 曲线)

  • Inherit Velocity
    • Mode = Current
    • Multiplier: 使用一条从1.0下降到0.0的曲线。
  • 效果: 飞弹发射初期被施法者引导(跟随施法者运动),但在飞行过程中逐渐脱离控制,沿着最后的方向独立飞行。

Inherit Velocity模块是连接粒子系统与动态游戏世界的桥梁。正确使用它,可以确保你的特效与移动的发射器之间产生物理上可信的互动,极大提升游戏的整体沉浸感。


1.6 Lifetime By Emitter Speed模块

根据粒子发射器的移动速度,来动态调整每个粒子出生时的初始生命周期。它是 Main Module中Start Lifetime属性的一个乘数修改器。创建与发射器速度动态关联的效果。

例如,当发射器移动越快时,产生的粒子存活时间越短,从而模拟出更真实、更具响应性的行为。

(1)Multiplier(乘数)

  • 说明:这是一个曲线控件。曲线的 X 轴 代表 发射器的速度大小,曲线的 Y 轴 代表应用于粒子 Start Lifetime的 缩放因子

  • 工作流程

    1. 当一个粒子即将出生时,系统会读取当前发射器的速度大小(magnitude)。

    2. 根据这个速度值,在曲线的 X 轴上找到对应的点。

    3. 读取该点在 Y 轴上的值,作为乘数。

    4. 最终粒子的生命周期 = Main Module 中设置的Start Lifetime X 从此曲线获取的乘数

  • 如何解读曲线

    • Y 轴 = 1: 生命周期不受影响。例如,当发射器静止时(速度为0),如果曲线在X=0时Y=1,那么粒子的生命周期就是Start Lifetime 的原值。

    • Y 轴 > 1: 延长生命周期。例如,当发射器高速移动时,如果曲线向上走,粒子会活得更久。

    • Y 轴 < 1: 缩短生命周期。例如,当发射器高速移动时,如果曲线向下走,粒子会更快消失。

    • Y 轴 = 0: 粒子立即消失

(2)Speed Range(速度范围)

  • 说明: 定义发射器速度的映射范围。它指定了曲线的 X 轴所代表的最小和最大速度值。

  • 属性

    • Range Min: 曲线 X 轴的起始点(最左端)对应的速度值。

    • Range Max: 曲线 X 轴的结束点(最右端)对应的速度值。

  • 工作流程

    • 如果发射器的速度 等于或低于 Range Min,则使用曲线最左端的 Y 值。

    • 如果发射器的速度 等于或高于 Range Max,则使用曲线最右端的 Y 值。

    • 如果发射器速度在最小和最大值之间,则根据其速度在曲线上进行插值,得到对应的乘数。

  • 用途: 让你可以精确控制效果在哪个速度区间内产生响应。例如,你可以设置速度范围为 5 到 20,意味着只有当发射器速度超过 5 时,效果才开始变化,并在速度达到 20 时完全生效。

Lifetime By Emitter Speed模块是一个强大的工具,用于创建对运动状态高度敏感的粒子效果。它通过将游戏对象的物理运动(速度)与粒子的核心属性(生命周期)动态绑定,极大地增强了特效的交互性和真实感,是制作高质量移动载体相关特效(车辆、角色、飞船等)的必备模块。


1.7 Force Over Lifetime模块

这个模块可以给粒子施加一个持续的力,这个力可以是固定方向,也可以是随机方向、噪声方向等。它会影响粒子的加速度,从而改变其速度。

(1)X, Y, Z(XYZ力分量)

  • 说明: 分别在X、Y、Z轴上为粒子添加一个持续的力。这个力会根据粒子的质量(如果启用了粒子物理质量)产生加速度,从而改变粒子的速度。

  • 控制方式

    • 常数: 固定力的大小,如在Y轴上设置5,粒子会持续受到向上的力。

    • 随机 between two constants: 在两个值之间随机,为每个粒子赋予不同的力。

    • 曲线 over Lifetime: 根据粒子生命周期的进度(从0到1)来定义力的大小变化。例如,让粒子在生命初期受到较大的力,随后减小。

  • 用途

    • 模拟恒定力场: 如重力(但注意,主模块中已有Gravity Modifier,这里可以模拟其他力,如风力)、电磁力等。

    • 创造复杂运动: 通过在不同轴上设置不同的曲线,可以创造出振荡、螺旋等运动。

(2)Space(空间)

  • 说明: 决定上述X, Y, Z力是应用在哪个坐标系下。

  • 选项

    • Local(局部空间): 力的方向相对于粒子系统的局部坐标系。如果旋转粒子系统,力的方向也会随之改变。

    • World(世界空间): 力的方向在世界坐标系中保持不变,不受粒子系统旋转的影响。

  • 用途

    • 使用 Local 空间可以创建跟随发射器方向的效果,如从旋转的风扇吹出的风。

    • 使用 World 空间可以创建全局的环境效果,如始终向上的浮力或固定的风向。

(3)Randomize(随机化方向)

  • 说明: 布尔值。如果启用,系统会忽略X, Y, Z的设置,而是为每个粒子施加一个随机方向的力

  • 控制方式: 当启用时,会出现一个控制随机力大小的字段,可以是常数、随机或曲线。

  • 效果

    • 每个粒子都会受到一个方向完全随机、大小由你控制的力。

    • 这会导致粒子向各个方向随机加速,产生极其混乱、无序的运动。

  • 用途

    • 爆炸效果: 模拟冲击波在非均匀介质中产生的混乱运动。

    • 沸腾的液体: 模拟液体内部的热对流和湍流。

    • 混沌能量: 创造不受控制的魔法或能量爆发。

使用粒子质量

在物理学中,力 (F)、质量 (m) 和加速度 (a) 的关系是 F = m × a。Unity 的粒子系统也遵循这个原理。

粒子质量来源:

  • 粒子系统的 Physics 模块中有一个 Mass 属性(默认值为1)。

  • 当施加力时,系统会自动考虑这个质量值来计算加速度:a = F / m

这意味着

  • 对于相同大小的力质量较小的粒子会产生更大的加速度,运动变化更剧烈。

  • 质量较大的粒子对相同的力反应较慢,运动更加"沉稳"。

与其他模块的协同工作:

理解 Force Over Lifetime 需要了解它如何与其他速度相关模块交互:

  • 主模块的Start Speed: 提供粒子的初始速度。

  • Velocity Over Lifetime: 直接设置速度值。

  • Force Over Lifetime: 通过物理力间接改变速度(产生加速度)。

  • Limit Velocity Over Lifetime: 限制由所有模块共同作用产生的最终速度。

重要关系:这些模块的效果是叠加的。粒子最终的运动是所有速度影响源共同作用的结果。


1.8 Color over Lifetime模块

Color over Lifetime(生命周期内的颜色),此模块控制粒子在其生命周期内的颜色和透明度变化。

属性

  • Color:一个渐变条,用于定义粒子从出生到死亡的颜色和透明度变化。

    • 你可以通过编辑渐变条来设置颜色和Alpha(透明度)随时间的变化。

    • 通常,为了让粒子平滑消失,会将渐变条末端的Alpha值设置为0。

用途:用于模拟粒子逐渐消失(淡出)或颜色随时间变化的效果,如火焰从黄色变为红色再变为黑色并消失。

1.9 Color by Speed模块

功能:根据粒子的当前速度来改变其颜色。

属性

  • Color:渐变控件,定义颜色映射。

  • Speed Range:速度的最小和最大值,用于将粒子速度映射到颜色渐变的0到1位置。

    • 用途:让高速粒子呈现不同颜色(如物体进入大气层燃烧,速度越快颜色越白)。

1.10 Size over Lifetime模块

功能:控制粒子在整个生命周期内的大小变化。

属性

  • Size:曲线或常数,定义粒子大小的乘数(相对于初始大小)。

    • 用途:让粒子逐渐变大或变小(如气泡上升时变大,火花消失时变小)。

1.11 Size by Speed模块

功能:根据粒子的当前速度来改变其大小。

属性

  • Size:曲线或常数,定义大小乘数。

  • Speed Range:速度的映射范围。

    • 用途:高速粒子被拉伸或压缩(如子弹轨迹)。

1.12 Rotation over Lifetime模块

功能:控制粒子在整个生命周期内的旋转速度。

属性

  • Angular Velocity:粒子每秒钟旋转的角速度(度/秒)。

    • 用途:让粒子持续旋转(如飘落的树叶)。

1.13 Rotation by Speed模块

功能:根据粒子的当前速度来改变其旋转速度。

属性

  • Angular Velocity:曲线或常数,定义角速度。

  • Speed Range:速度的映射范围。

    • 用途:粒子移动越快,旋转越快(如滚动的石子)。

1.14 External Forces模块

功能:(外部作用力)控制粒子受场景中"风区"(Wind Zones)影响的程度。

属性

  • Multiplier:风区影响力的乘数。

  • Influence Filter:过滤器,可选择影响所有风区或指定列表中的风区。

  • Influence Mask:层掩码,只有指定层上的风区才会影响粒子。

    • 用途:让烟雾、旗帜等效果受场景风力影响。

1.15 Noise模块

功能:(噪声)为粒子运动添加随机紊乱,创造有机、自然的效果。

主要属性

  • Separate Axes:是否在每个轴上独立设置噪声。

  • Strength:噪声强度。

  • Frequency:噪声变化频率。

  • Scroll Speed:噪声场移动速度。

  • Damping:是否随速度增加而减弱噪声。

  • Octaves:噪声叠加层数,增加细节。

  • Quality:噪声质量(低/中/高)。

  • Remap:重新映射噪声值到新范围。

  • Position/Size Amount:噪声影响位置/大小的程度。

    • 用途:创建缭绕的烟雾、飘动的云朵、魔法能量等。

1.16 Collision模块

功能:让粒子与场景中的碰撞体交互。

主要属性

  • Type:平面(Planes)或世界(World)碰撞。

  • Planes:手动指定的碰撞平面列表。

  • Dampen/Bounce/Lifetime Loss:碰撞后速度保留/反弹/生命损失比例。

  • Min/Max Kill Speed:碰撞后销毁粒子的速度阈值。

  • Radius Scale:粒子碰撞体半径缩放。

  • Send Collision Messages:是否发送碰撞消息到脚本。

    • 用途:雨滴落地溅起、粒子在表面弹跳等。

1.17 Triggers模块

功能:当粒子进入特定触发器区域时执行操作。

主要属性

  • Shape:触发器形状(球体/盒子)。

  • Radius/Size:触发器尺寸。

  • Inside/Outside:在触发器内部/外部时执行的操作。

  • Action:触发时执行的操作(忽略/清除粒子/回调脚本)。

    • 用途:粒子进入特定区域时消失或触发游戏事件。

1.18 Sub Emitters模块

功能:在粒子出生、死亡、碰撞时触发新的粒子系统。

主要属性

  • Sub Emitters:列表,可添加多个子发射器。

  • Trigger:触发时机(出生Birth、死亡Death、碰撞Collision)。

  • Emit Probability:触发概率。

  • Inherit:继承父粒子哪些属性(位置、旋转、速度等)。

    • 用途:爆炸后产生烟雾、水滴碰撞时溅起水花。

1.19 Texture Sheet Animation模块

功能:(纹理表动画)让粒子在生命周期内播放纹理序列(雪碧图动画)。

主要属性

  • Tiles:纹理在X和Y方向上的分割数。

  • Animation:动画类型(整个表格Whole Sheet或单行Single Row)。

  • Frame over Time:随时间变化的帧索引。

  • Start Frame:起始帧。

  • Cycles:生命周期内动画循环次数。

    • 用途:闪烁的星星、燃烧的火焰帧动画。

1.20  Lights模块

功能:为每个粒子附加一个灯光源。

主要属性

  • Light:要实例化的灯光预制体。

  • Ratio:多少比例的粒子获得灯光。

  • Random Distribution:是否随机分配。

  • Use Particle Color:是否使用粒子颜色作为灯光颜色。

  • Size Affects Range:粒子大小是否影响灯光范围。

  • Alpha Affects Intensity:粒子透明度是否影响灯光强度。

    • 用途:爆炸时的闪光、魔法粒子的发光效果。

1.21 Trails模块

功能:为每个粒子生成拖尾轨迹。

主要属性

  • Mode:拖尾模式(每个粒子Per Particle或带纹理的色带Ribbon)。

  • Ratio:多少比例的粒子产生拖尾。

  • Lifetime:拖尾存在时间。

  • Minimum Vertex Distance:生成新顶点的最小距离。

  • Texture Mode:纹理模式(拉伸Stretch/平铺Tile)。

  • Width:拖尾宽度。

  • Color:拖尾颜色渐变。

  • Corner Vertices/End Cap Vertices:拐角和末端顶点数,影响平滑度。

    • 用途:子弹轨迹、魔法光效、快速移动物体的尾迹。

1.22 Custom Data模块

功能:为粒子添加自定义数据,可通过脚本访问和修改。

主要属性

  • Mode:数据模式(向量Vector/曲线Curve)。

  • Vector/Curve:定义的自定义数据。

    • 用途:高级效果,通过脚本基于自定义数据控制粒子行为。

1.23 Renderer模块

功能:控制粒子最终的渲染方式和外观。

核心属性

  • Render Mode

    • Billboard:始终面向相机

    • Stretched Billboard:根据速度拉伸

    • Horizontal/Vertical Billboard:水平/垂直广告牌

    • Mesh:使用3D模型

  • Material:渲染材质

  • Sort Mode:排序模式(By Distance/Oldest in Front等)

  • Sorting Fudge:在渲染队列中的排序偏移

  • Min/Max Particle Size:粒子大小限制

  • Render Alignment:渲染对齐方式(View/World/Local等)

  • Pivot:粒子枢轴点偏移

  • Masking:与2D遮罩的交互

  • Enable GPU Instancing:启用GPU实例化提升性能

    • 用途:定义粒子的最终视觉表现,是所有效果的呈现基础。

2 Line Renderer 线段渲染器

Unity的线段渲染器 (Line Renderer) 是一个强大的组件,用于在3D空间中的两个或多个点之间绘制连续的线条。可以用它创建从简单的直线到复杂的螺旋线等各种效果,比如激光束、闪电、武器轨迹或自定义的UI图形。

2.1 属性介绍

属性分类 属性名称 功能说明 选项/效果
基础设置 Loop 控制线条是否闭合 • True:连接起点和终点,形成闭合图形
• False:线条开放,起点和终点不连接
Positions 设置线条的顶点位置 可手动添加、移除顶点并调整位置
Use World Space 确定线条使用的坐标空间 • 勾选:使用世界空间坐标绘制
• 未勾选:使用相对于父对象的本地空间坐标
外观控制 Width Curve 调整线条宽度 使用曲线实现宽度随线条长度变化的效果
Color 设置线条颜色 定义线条的基本颜色
Texture Mode 设置纹理映射方式 • Stretch:纹理拉伸到整个线条
• Tile:纹理在线条上重复平铺
• Distribute Per Segment:纹理在每个线段均匀分布
• Repeat Per Segment:纹理在每个线段重复显示
细节优化 Corner Vertices 设置拐角处顶点数 增加数值使拐角更加平滑
End Cap Vertices 设置端点处顶点数 增加数值使端点更加平滑
Shadow Bias 调整阴影偏移 避免阴影出现Z-fighting问题
渲染与光照 Alignment 确定线条对齐方式 • View:线条始终面向相机
• Transform Z:线条在Z轴上对齐
Generate Lighting Data 生成光照数据 启用后,Unity为LineRenderer生成光照数据,正确响应场景光照
Materials 设置线条材质 可为LineRenderer指定一个或多个材质,控制外观如颜色、贴图等
光照与阴影 Lighting → Cast Shadows 控制阴影投射 控制线条是否投射阴影到其他物体上
Lighting → Receive Shadows 控制阴影接收 控制线条是否接收其他物体投射的阴影
探针系统 Probes → Light Probes 光照探针 在场景中采样光照信息,在动态物体上正确应用光照
Probes → Reflection Probes 反射探针 捕获环境反射信息,在物体表面正确反映周围环境
高级设置 Additional Settings → Motion Vectors 运动矢量 控制是否为线条启用运动矢量,用于运动模糊等效果
Additional Settings → Dynamic Occlusion 动态遮挡 控制线条是否参与动态遮挡计算,实现更好的性能和视觉效果
Additional Settings → Sorting Layer 排序层 指定线条所在的排序层,确定其在场景中的渲染顺序
Additional Settings → Order in Layer 层中的顺序 指定线条在排序层中的渲染顺序,影响同一排序层中的渲染优先级

2.2 基本用法与脚本控制

在Unity中创建线段渲染器非常简单:

  1. 在主菜单栏选择 GameObject > Create Empty 创建一个空游戏对象。

  2. 选中该对象,在 Inspector 窗口中选择 Add Component > Effects > Line Renderer

核心的脚本方法和属性:

  • positionCount:设置或获取线条的顶点数量。

  • SetPosition(int index, Vector3 position):设置单个顶点的位置。

  • SetPositions(Vector3[] positions):一次性设置所有顶点的位置,比多次调用SetPosition更高效。

  • startWidth / endWidth:直接设置线条起点和终点的宽度。

  • colorGradient:通过代码设置线条的颜色渐变。

示例:动态创建一个正弦波状的线段渲染器

public class ControllerLine : MonoBehaviour
{
    public int points = 50; // 顶点数量
    public float amplitude = 1f; // 振幅
    public float frequency = 1f; // 频率
    public float length = 5f; // 线条长度

    private LineRenderer lineRenderer;

    void Start()
    {
        // 获取或添加LineRenderer组件
        lineRenderer = GetComponent<LineRenderer>();
        if (lineRenderer == null)
        {
            lineRenderer = gameObject.AddComponent<LineRenderer>();
        }

        // 基础设置
        lineRenderer.positionCount = points;
        lineRenderer.widthMultiplier = 0.2f;

        // 材质和颜色设置(确保你有合适的材质)
        lineRenderer.material = new Material(Shader.Find("Sprites/Default"));

        // 设置颜色渐变
        Gradient gradient = new Gradient();
        gradient.SetKeys(
            new GradientColorKey[] { new GradientColorKey(Color.cyan, 0.0f), new GradientColorKey(Color.blue, 1.0f) },
            new GradientAlphaKey[] { new GradientAlphaKey(1f, 0.0f), new GradientAlphaKey(1f, 1.0f) }
        );
        lineRenderer.colorGradient = gradient;
    }

    void Update()
    {
        // 每一帧更新顶点位置,形成动画
        if (lineRenderer == null) return;

        for (int i = 0; i < points; i++)
        {
            float x = (i / (float)(points - 1)) * length;
            float y = Mathf.Sin(x * frequency + Time.time) * amplitude;
            lineRenderer.SetPosition(i, new Vector3(x, y, 0));
        }
    }
}

注意事项

  • 材质选择:线段渲染器最适合使用粒子着色器 (Particle Shaders) 或 Sprite/Default 着色器的材质,因为它们通常支持透明度和颜色渐变。

  • 性能优化

    • 尽量减少顶点的数量。

    • 当需要设置多个顶点位置时,优先使用 SetPositions 方法,而不是循环调用 SetPosition,因为前者效率更高。

  • 常见问题

    • 线条随摄像机旋转:这是因为 Alignment 属性默认设置为 View。如果不希望如此,将其改为 Local 即可。

    • 线条看起来像素化或不光滑:尝试为材质使用更高质量、抗锯齿效果更好的纹理,并增加 Corner Vertices 和 End Cap Vertices 的数值来平滑拐角和端点。

Trail Renderer拖尾渲染器

3.1 属性介绍

属性分类 属性名称 功能说明
基础控制 Time 拖尾的持续时间(秒),决定了轨迹的长度。
Min Vertex Distance 生成新顶点前所需的最小移动距离-1。值越小,轨迹越平滑。
AutoDestruct 启用后,当游戏对象在静止Time秒后会自动销毁。
外观与样式 Width 旧版宽度控制方式。新版通常使用Width CurveWidth Multiplier来定义从头部到尾部的宽度变化。
Color 使用颜色渐变来控制轨迹沿其长度的颜色和透明度变化。
Texture Mode 控制纹理映射方式,如Stretch(拉伸)或Tile(平铺)。
精细调整 Corner Vertices 设置拐角处的顶点数。增加数值可使拐角更加平滑。
End Cap Vertices 设置端点处的顶点数。增加数值可使端点更加平滑。
Alignment 控制轨迹的朝向-1View使轨迹始终面向摄像机,Local则根据其变换组件的方向对齐-6
光照与渲染 Generate Lighting Data 启用后,Unity会为轨迹生成法线和切线,从而允许场景光照影响轨迹。
Cast/Receive Shadows 控制轨迹是否投射接收阴影
Materials 用于设置轨迹的材质。通常推荐使用粒子着色器(Particle Shaders) 的材质。

3.2 基本方法与脚本控制

  1. 创建一个空游戏对象。

  2. 为其添加Trail Renderer组件。

  3. 在Materials属性中,指定使用粒子着色器的材质。材质的纹理建议使用正方形尺寸(如256x256)。

  4. 将此空对象作为需要产生轨迹的运动物体(如玩家角色、发射物)的子对象,或者通过脚本控制其位置跟随。

代码:

[RequireComponent(typeof(TrailRenderer))]
public class TrailController : MonoBehaviour
{
    private TrailRenderer trail;

    void Start()
    {
        // 获取Trail Renderer组件
        trail = GetComponent<TrailRenderer>();

        // 确保拖尾效果是启用的
        trail.enabled = true;

        // 动态修改拖尾时间
        trail.time = 2.0f;
    }

    void Update()
    {
        // 例如,按下空格键清除已有拖尾
        if (Input.GetKeyDown(KeyCode.Space))
        {
            trail.Clear(); // 立即清除当前的所有轨迹[citation:1]
        }
    }
}

注意事项:

  • 性能平衡:Min Vertex Distance是关键参数。设置过小(如0.05)会得到平滑轨迹但增加计算开销。在保证效果的前提下,尽量使用较大的值。

  • 材质问题:如果拖尾显示为粉红色,通常是因为材质丢失或着色器设置不正确。请确保使用了合适的粒子材质。

  • 轨迹不消失:检查Time值是否设置得过大,或者尝试在脚本中使用 Clear()方法手动清除-1

  • 实现固定长度拖尾:可以通过脚本根据移动速度动态调整Time属性。基本思路是:拖尾时间 = 期望的固定长度 / 当前移动速度。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐