【Unity基础详解】(8)Unity核心:特效系统
Unity特效系统主要由粒子系统(Particle System)、线段渲染器(Line Renderer)和拖尾渲染器(Trail Renderer)三大组件构成。粒子系统通过模块化设计实现复杂效果,包含主控模块、发射模块、速度/生命周期控制等20多个功能模块,支持火焰、烟雾等动态粒子效果。线段渲染器用于绘制连续线条,可创建激光、轨迹等效果,支持宽度/颜色变化和纹理映射。拖尾渲染器生成运动物体的
目录
1.4 Limit Velocity over Lifetime模块
1.6 Lifetime By Emitter Speed模块
1.19 Texture Sheet Animation模块
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(偏移)
说明: 仅用于Radial和Tangential模式。用于调整径向和切向速度计算所依据的中心点位置。
控制方式: 通过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。
经典组合示例:
爆炸碎片:
主模块: 较高的Start Speed让碎片获得初始动能。
Velocity over Lifetime:
Radial: 一个较大的正值,模拟冲击波。
Speed Modifier: 一条从1到0的陡峭曲线,模拟空气阻力使碎片迅速减速。
龙卷风/涡旋:
Velocity over Lifetime:
Radial: 一个较小的负值,将粒子向中心拉动。
Tangential: 一个较大的正值,让粒子快速旋转。
Y (World Space): 一个正值,让涡旋整体向上移动。
魔法能量球:
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的 缩放因子。
工作流程:
当一个粒子即将出生时,系统会读取当前发射器的速度大小(magnitude)。
根据这个速度值,在曲线的 X 轴上找到对应的点。
读取该点在 Y 轴上的值,作为乘数。
最终粒子的生命周期 = 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中创建线段渲染器非常简单:
在主菜单栏选择 GameObject > Create Empty 创建一个空游戏对象。
选中该对象,在 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的数值来平滑拐角和端点。
3 Trail Renderer拖尾渲染器
3.1 属性介绍
| 属性分类 | 属性名称 | 功能说明 |
|---|---|---|
| 基础控制 | Time | 拖尾的持续时间(秒),决定了轨迹的长度。 |
| Min Vertex Distance | 生成新顶点前所需的最小移动距离-1。值越小,轨迹越平滑。 | |
| AutoDestruct | 启用后,当游戏对象在静止Time秒后会自动销毁。 | |
| 外观与样式 | Width | 旧版宽度控制方式。新版通常使用Width Curve和Width Multiplier来定义从头部到尾部的宽度变化。 |
| Color | 使用颜色渐变来控制轨迹沿其长度的颜色和透明度变化。 | |
| Texture Mode | 控制纹理映射方式,如Stretch(拉伸)或Tile(平铺)。 | |
| 精细调整 | Corner Vertices | 设置拐角处的顶点数。增加数值可使拐角更加平滑。 |
| End Cap Vertices | 设置端点处的顶点数。增加数值可使端点更加平滑。 | |
| Alignment | 控制轨迹的朝向-1。View使轨迹始终面向摄像机,Local则根据其变换组件的方向对齐-6。 | |
| 光照与渲染 | Generate Lighting Data | 启用后,Unity会为轨迹生成法线和切线,从而允许场景光照影响轨迹。 |
| Cast/Receive Shadows | 控制轨迹是否投射和接收阴影。 | |
| Materials | 用于设置轨迹的材质。通常推荐使用粒子着色器(Particle Shaders) 的材质。 |
3.2 基本方法与脚本控制
创建一个空游戏对象。
为其添加Trail Renderer组件。
在Materials属性中,指定使用粒子着色器的材质。材质的纹理建议使用正方形尺寸(如256x256)。
将此空对象作为需要产生轨迹的运动物体(如玩家角色、发射物)的子对象,或者通过脚本控制其位置跟随。
代码:
[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属性。基本思路是:拖尾时间 = 期望的固定长度 / 当前移动速度。
更多推荐


所有评论(0)