粒子系统属性详解
在Unity引擎中,粒子系统是一个非常强大的工具,用于创建各种视觉效果,如火焰、烟雾、魔法效果等。在虚拟现实(VR)游戏中,粒子系统更是不可或缺的,它可以增强游戏的沉浸感和真实感。本节将详细讲解Unity粒子系统的各个属性及其用途,帮助你更好地理解和使用这个强大的功能。
粒子系统的概述
粒子系统在Unity中是一个组件,可以附加到任何GameObject上。粒子系统由多个模块组成,每个模块负责控制粒子的某一方面。通过组合这些模块,你可以创建出非常复杂和精细的视觉效果。粒子系统的主要模块包括:
-
Main
-
Emission
-
Shape
-
Velocity over Lifetime
-
Limit Velocity over Lifetime
-
Inherit Velocity
-
Force over Lifetime
-
Color over Lifetime
-
Color by Speed
-
Size over Lifetime
-
Size by Speed
-
Rotation over Lifetime
-
Rotation by Speed
-
External Forces
-
Noise
-
Collision
-
Trigger
-
Sub Emitters
-
Texture Sheet Animation
-
Lighting
-
Renderer
-
Trail
Main模块
基本属性
-
Duration:粒子系统的总持续时间。在这个时间内,粒子系统会不断发射粒子。
-
Looping:是否循环播放粒子系统。如果启用,粒子系统会在Duration时间结束后重新开始。
-
Prewarm:是否预热粒子系统。预热会使粒子系统在第一次播放时立即显示为已经运行了一段时间的效果。
-
Start Lifetime:粒子的初始生命周期。可以设置为一个固定的值或一个范围。
-
Start Speed:粒子的初始速度。可以设置为一个固定的值或一个范围。
-
Start Size:粒子的初始大小。可以设置为一个固定的值或一个范围。
-
Start Color:粒子的初始颜色。可以设置为一个固定的值或一个渐变。
-
Gravity Modifier:重力修正系数。用于调整粒子受到的重力影响。
-
Simulation Space:模拟空间。可以设置为World(世界空间)、Local(局部空间)或Custom(自定义空间)。
-
Simulation Speed:模拟速度。用于调整粒子系统的播放速度。
-
Scaling Mode:缩放模式。可以设置为Hierarchy(继承父对象的缩放)、Local(局部缩放)或Shape(形状缩放)。
-
Play On Awake:是否在对象唤醒时自动播放粒子系统。
-
Max Particles:粒子系统的最大粒子数。
示例代码
// 示例代码:创建一个粒子系统并设置Main模块属性
using UnityEngine;
public class ParticleSystemExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Main模块
ParticleSystem.MainModule main = particleSystem.main;
// 设置粒子系统的总持续时间为5秒
main.duration = 5.0f;
// 启用循环播放
main.loop = true;
// 预热粒子系统
main.prewarm = true;
// 设置粒子的初始生命周期为2到3秒
main.startLifetime = new ParticleSystem.MinMaxCurve(2.0f, 3.0f);
// 设置粒子的初始速度为5米/秒
main.startSpeed = 5.0f;
// 设置粒子的初始大小为1米
main.startSize = 1.0f;
// 设置粒子的初始颜色为红色到蓝色的渐变
Gradient gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[] { new GradientColorKey(Color.red, 0.0f), new GradientColorKey(Color.blue, 1.0f) },
new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) }
);
main.startColor = gradient;
// 设置重力修正系数为0.5
main.gravityModifier = 0.5f;
// 设置模拟空间为局部空间
main.simulationSpace = ParticleSystemSimulationSpace.Local;
// 设置模拟速度为2倍
main.simulationSpeed = 2.0f;
// 设置缩放模式为局部缩放
main.scalingMode = ParticleSystemScalingMode.Local;
// 禁用自动播放
main.playOnAwake = false;
// 设置最大粒子数为100
main.maxParticles = 100;
}
void Update()
{
// 在Update方法中手动播放粒子系统
if (Input.GetKeyDown(KeyCode.Space))
{
particleSystem.Play();
}
}
}
详细解释
-
Duration 和 Looping:这两个属性决定了粒子系统的播放时间和是否循环。例如,设置
main.duration = 5.0f
表示粒子系统将持续5秒,如果main.loop = true
,粒子系统会在5秒结束后重新开始。 -
Prewarm:预热功能使粒子系统在第一次播放时立即显示为已经运行了一段时间的效果,这对于需要即时视觉效果的场景非常有用。
-
Start Lifetime 和 Start Speed:这些属性决定了粒子的初始生命周期和速度。可以设置为一个固定的值或一个范围,例如
main.startLifetime = new ParticleSystem.MinMaxCurve(2.0f, 3.0f)
表示粒子的生命周期在2到3秒之间随机。 -
Start Size 和 Start Color:这些属性决定了粒子的初始大小和颜色。颜色可以设置为一个固定的值或一个渐变。例如,设置
main.startColor = gradient
会使粒子从红色渐变为蓝色。 -
Gravity Modifier:这个属性用于调整粒子受到的重力影响。例如,设置
main.gravityModifier = 0.5f
表示粒子受到的重力影响为默认值的一半。 -
Simulation Space:这个属性决定了粒子系统在哪个空间中模拟。例如,设置
main.simulationSpace = ParticleSystemSimulationSpace.Local
表示粒子系统在局部空间中模拟。 -
Simulation Speed:这个属性用于调整粒子系统的播放速度。例如,设置
main.simulationSpeed = 2.0f
表示粒子系统以2倍速度播放。 -
Scaling Mode:这个属性决定了粒子系统的缩放模式。例如,设置
main.scalingMode = ParticleSystemScalingMode.Local
表示粒子系统在局部空间中缩放。 -
Play On Awake:这个属性决定了粒子系统是否在对象唤醒时自动播放。例如,设置
main.playOnAwake = false
表示粒子系统不会自动播放,需要手动调用particleSystem.Play()
。 -
Max Particles:这个属性决定了粒子系统的最大粒子数。例如,设置
main.maxParticles = 100
表示粒子系统最多可以同时存在100个粒子。
Emission模块
基本属性
-
Rate over Time:每秒发射的粒子数。可以设置为一个固定的值或一个曲线。
-
Rate over Distance:每单位距离发射的粒子数。可以设置为一个固定的值或一个曲线。
-
Bursts:粒子的爆发。可以设置多个爆发,在特定时间或条件下发射大量粒子。
示例代码
// 示例代码:设置粒子系统的Emission模块属性
using UnityEngine;
public class EmissionExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Emission模块
ParticleSystem.EmissionModule emission = particleSystem.emission;
// 设置每秒发射10个粒子
emission.rateOverTime = 10.0f;
// 设置每单位距离发射2个粒子
emission.rateOverDistance = 2.0f;
// 添加一个爆发,在2秒后爆发50个粒子
ParticleSystem.Burst[] bursts = new ParticleSystem.Burst[1];
bursts[0] = new ParticleSystem.Burst(2.0f, 50);
emission.bursts = bursts;
}
}
详细解释
-
Rate over Time 和 Rate over Distance:这两个属性决定了粒子的发射频率。
emission.rateOverTime = 10.0f
表示每秒发射10个粒子,emission.rateOverDistance = 2.0f
表示每单位距离发射2个粒子。 -
Bursts:这个属性用于设置粒子的爆发。例如,
bursts[0] = new ParticleSystem.Burst(2.0f, 50);
表示在2秒后爆发50个粒子。你可以添加多个爆发,以实现更复杂的发射效果。
Shape模块
基本属性
-
Shape:粒子的发射形状。可以设置为多种形状,如球形、锥形、矩形等。
-
Angle:发射角度。用于控制粒子的发射方向。
-
Radius:半径。用于设置发射形状的半径。
-
Radius Mode:半径模式。可以设置为固定值或随机值。
-
Radius Spread:半径扩散。用于设置半径的随机范围。
-
Arc:弧度。用于设置发射形状的弧度。
-
Arc Mode:弧度模式。可以设置为固定值或随机值。
-
Arc Spread:弧度扩散。用于设置弧度的随机范围。
-
Arc Speed:弧度速度。用于设置弧度的变化速度。
-
Position:位置。用于设置发射形状的中心位置。
-
Align to Direction:是否对齐发射方向。如果启用,粒子会沿着发射方向对齐。
-
Random Direction Amount:随机方向量。用于设置粒子发射方向的随机程度。
-
Spherical Direction Amount:球形方向量。用于设置粒子发射方向在球形空间中的随机程度。
-
Mesh:网格。用于设置发射形状的网格。
-
Mesh Renderer:网格渲染器。用于设置发射形状的网格渲染器。
-
Mesh Material:网格材质。用于设置发射形状的网格材质。
-
Normal Offset:法线偏移。用于设置粒子发射位置的法线偏移量。
示例代码
// 示例代码:设置粒子系统的Shape模块属性
using UnityEngine;
public class ShapeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
public Mesh mesh;
public Material material;
void Start()
{
// 获取粒子系统的Shape模块
ParticleSystem.ShapeModule shape = particleSystem.shape;
// 设置发射形状为球形
shape.shapeType = ParticleSystemShapeType.Sphere;
// 设置球形的半径为2米
shape.radius = 2.0f;
// 设置发射形状的中心位置
shape.position = new Vector3(0, 0, 0);
// 启用随机方向量
shape.randomDirectionAmount = 0.5f;
// 设置发射形状的网格
shape.mesh = mesh;
// 设置发射形状的网格渲染器
shape.meshRenderer = GetComponent<MeshRenderer>();
// 设置发射形状的网格材质
shape.meshMaterial = material;
// 设置法线偏移量为0.1
shape.normalOffset = 0.1f;
}
}
详细解释
-
Shape:这个属性决定了粒子的发射形状。例如,设置
shape.shapeType = ParticleSystemShapeType.Sphere
表示粒子从球形发射。 -
Radius 和 Radius Mode:这些属性决定了发射形状的半径及其模式。例如,设置
shape.radius = 2.0f
表示球形的半径为2米。 -
Position:这个属性用于设置发射形状的中心位置。例如,设置
shape.position = new Vector3(0, 0, 0)
表示发射形状的中心位置在世界坐标系的原点。 -
Random Direction Amount 和 Spherical Direction Amount:这些属性用于设置粒子发射方向的随机程度。例如,设置
shape.randomDirectionAmount = 0.5f
表示粒子发射方向有一定的随机性。 -
Mesh、Mesh Renderer 和 Mesh Material:这些属性用于设置粒子发射形状的网格及其渲染器和材质。例如,设置
shape.mesh = mesh
表示粒子从指定的网格发射。 -
Normal Offset:这个属性用于设置粒子发射位置的法线偏移量。例如,设置
shape.normalOffset = 0.1f
表示粒子发射位置沿着法线方向偏移0.1米。
Velocity over Lifetime模块
基本属性
-
X、Y、Z:粒子在生命周期中的速度变化。可以设置为一个固定的值或一个曲线。
-
Orbital X、Orbital Y、Orbital Z:粒子在生命周期中的轨道速度变化。可以设置为一个固定的值或一个曲线。
-
Orbital X Y Z Spread:轨道速度的随机范围。用于设置轨道速度的随机程度。
-
Radial:粒子在生命周期中的径向速度变化。可以设置为一个固定的值或一个曲线。
-
Radial Spread:径向速度的随机范围。用于设置径向速度的随机程度。
-
Speed Modifier:速度修正系数。用于调整粒子的速度。
-
Speed Modifier Spread:速度修正系数的随机范围。用于设置速度修正系数的随机程度。
示例代码
// 示例代码:设置粒子系统的Velocity over Lifetime模块属性
using UnityEngine;
public class VelocityOverLifetimeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Velocity over Lifetime模块
ParticleSystem.VelocityOverLifetimeModule velocityOverLifetime = particleSystem.velocityOverLifetime;
// 设置粒子在生命周期中的X轴速度变化为0到1米/秒
velocityOverLifetime.x = new ParticleSystem.MinMaxCurve(0.0f, 1.0f);
// 设置粒子在生命周期中的Y轴速度变化为-1到1米/秒
velocityOverLifetime.y = new ParticleSystem.MinMaxCurve(-1.0f, 1.0f);
// 设置粒子在生命周期中的Z轴速度变化为-1到0米/秒
velocityOverLifetime.z = new ParticleSystem.MinMaxCurve(-1.0f, 0.0f);
// 启用轨道速度变化
velocityOverLifetime.orbitalX = new ParticleSystem.MinMaxCurve(0.0f, 1.0f);
velocityOverLifetime.orbitalY = new ParticleSystem.MinMaxCurve(0.0f, 1.0f);
velocityOverLifetime.orbitalZ = new ParticleSystem.MinMaxCurve(0.0f, 1.0f);
// 设置轨道速度的随机范围
velocityOverLifetime.orbitalXMultiplier = 1.0f;
velocityOverLifetime.orbitalYMultiplier = 1.0f;
velocityOverLifetime.orbitalZMultiplier = 1.0f;
// 启用径向速度变化
velocityOverLifetime.radial = new ParticleSystem.MinMaxCurve(0.0f, 1.0f);
// 设置径向速度的随机范围
velocityOverLifetime.radialMultiplier = 1.0f;
// 设置速度修正系数
velocityOverLifetime.speedModifier = 0.5f;
// 设置速度修正系数的随机范围
velocityOverLifetime.speedModifierMultiplier = 1.0f;
}
}
详细解释
-
X、Y、Z:这些属性用于设置粒子在生命周期中的速度限制。例如,设置
limitVelocity.x = 5.0f
表示粒子在X轴上的最大速度为5米/秒。如果粒子的速度超过了这个限制,它会被减缓到该限制值。 -
Space:这个属性决定了速度限制的空间。可以设置为世界空间(World)或局部空间(Local)。例如,设置
limitVelocity.space = ParticleSystemSimulationSpace.Local
表示速度限制在局部空间中应用。 -
Dampen:这个属性决定了是否减缓粒子速度。如果启用,粒子速度会逐渐减缓到速度限制值。例如,设置
limitVelocity.dampen = true
会使粒子速度逐渐减缓。 -
Multiplier:这个属性用于调整速度限制的强度。例如,设置
limitVelocity.multiplier = 1.0f
表示速度限制的强度为1倍。
示例代码
// 示例代码:设置粒子系统的Limit Velocity over Lifetime模块属性
using UnityEngine;
public class LimitVelocityOverLifetimeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Limit Velocity over Lifetime模块
ParticleSystem.LimitVelocityOverLifetimeModule limitVelocity = particleSystem.limitVelocityOverLifetime;
// 启用速度限制
limitVelocity.enabled = true;
// 设置粒子在生命周期中的X轴速度限制为5米/秒
limitVelocity.x = 5.0f;
// 设置粒子在生命周期中的Y轴速度限制为5米/秒
limitVelocity.y = 5.0f;
// 设置粒子在生命周期中的Z轴速度限制为5米/秒
limitVelocity.z = 5.0f;
// 设置速度限制的空间为局部空间
limitVelocity.space = ParticleSystemSimulationSpace.Local;
// 启用减缓粒子速度
limitVelocity.dampen = true;
// 设置速度限制的修正系数
limitVelocity.multiplier = 1.0f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用速度限制模块。例如,设置
limitVelocity.enabled = true
表示启用速度限制模块。 -
X、Y、Z:这些属性用于设置粒子在生命周期中的速度限制。例如,设置
limitVelocity.x = 5.0f
表示粒子在X轴上的最大速度为5米/秒。如果粒子的速度超过了这个限制,它会被减缓到该限制值。 -
Space:这个属性决定了速度限制的空间。可以设置为世界空间(World)或局部空间(Local)。例如,设置
limitVelocity.space = ParticleSystemSimulationSpace.Local
表示速度限制在局部空间中应用。 -
Dampen:这个属性决定了是否减缓粒子速度。如果启用,粒子速度会逐渐减缓到速度限制值。例如,设置
limitVelocity.dampen = true
会使粒子速度逐渐减缓。 -
Multiplier:这个属性用于调整速度限制的强度。例如,设置
limitVelocity.multiplier = 1.0f
表示速度限制的强度为1倍。
Inherit Velocity模块
基本属性
-
Mode:继承速度的模式。可以设置为None、Initial、Current或Both。
-
Multiplier:继承速度的修正系数。用于调整继承速度的强度。
示例代码
// 示例代码:设置粒子系统的Inherit Velocity模块属性
using UnityEngine;
public class InheritVelocityExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Inherit Velocity模块
ParticleSystem.InheritVelocityModule inheritVelocity = particleSystem.inheritVelocity;
// 启用继承速度
inheritVelocity.enabled = true;
// 设置继承速度的模式为Current
inheritVelocity.mode = ParticleSystemInheritVelocityMode.Current;
// 设置继承速度的修正系数为0.5
inheritVelocity.multiplier = 0.5f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用继承速度模块。例如,设置
inheritVelocity.enabled = true
表示启用继承速度模块。 -
Mode:这个属性决定了粒子继承速度的模式。可以设置为无(None)、初始速度(Initial)、当前速度(Current)或两者(Both)。例如,设置
inheritVelocity.mode = ParticleSystemInheritVelocityMode.Current
表示粒子继承当前速度。 -
Multiplier:这个属性用于调整继承速度的强度。例如,设置
inheritVelocity.multiplier = 0.5f
表示粒子继承速度的强度为0.5倍。
Force over Lifetime模块
基本属性
-
X、Y、Z:粒子在生命周期中的力变化。可以设置为一个固定的值或一个曲线。
-
Space:力变化的空间。可以设置为世界空间或局部空间。
-
Random Force:粒子在生命周期中的随机力变化。可以设置为一个范围。
-
Multiplier:力变化的修正系数。用于调整力变化的强度。
示例代码
// 示例代码:设置粒子系统的Force over Lifetime模块属性
using UnityEngine;
public class ForceOverLifetimeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Force over Lifetime模块
ParticleSystem.ForceOverLifetimeModule forceOverLifetime = particleSystem.forceOverLifetime;
// 启用力变化
forceOverLifetime.enabled = true;
// 设置粒子在生命周期中的X轴力变化为-1到1牛顿
forceOverLifetime.x = new ParticleSystem.MinMaxCurve(-1.0f, 1.0f);
// 设置粒子在生命周期中的Y轴力变化为-2到2牛顿
forceOverLifetime.y = new ParticleSystem.MinMaxCurve(-2.0f, 2.0f);
// 设置粒子在生命周期中的Z轴力变化为-1到1牛顿
forceOverLifetime.z = new ParticleSystem.MinMaxCurve(-1.0f, 1.0f);
// 设置力变化的空间为局部空间
forceOverLifetime.space = ParticleSystemSimulationSpace.Local;
// 设置粒子在生命周期中的随机力变化为-1到1牛顿
forceOverLifetime.randomForce = new Vector3(1.0f, 1.0f, 1.0f);
// 设置力变化的修正系数为1.0
forceOverLifetime.multiplier = 1.0f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用力变化模块。例如,设置
forceOverLifetime.enabled = true
表示启用力变化模块。 -
X、Y、Z:这些属性用于设置粒子在生命周期中的力变化。可以设置为一个固定的值或一个曲线。例如,设置
forceOverLifetime.x = new ParticleSystem.MinMaxCurve(-1.0f, 1.0f)
表示粒子在X轴上的力从-1到1牛顿随机变化。 -
Space:这个属性决定了力变化的空间。可以设置为世界空间(World)或局部空间(Local)。例如,设置
forceOverLifetime.space = ParticleSystemSimulationSpace.Local
表示力变化在局部空间中应用。 -
Random Force:这个属性用于设置粒子在生命周期中的随机力变化。可以设置为一个范围,例如
forceOverLifetime.randomForce = new Vector3(1.0f, 1.0f, 1.0f)
表示粒子在X、Y、Z轴上的随机力变化范围为-1到1牛顿。 -
Multiplier:这个属性用于调整力变化的强度。例如,设置
forceOverLifetime.multiplier = 1.0f
表示力变化的强度为1倍。
Color over Lifetime模块
基本属性
-
Color:粒子在生命周期中的颜色变化。可以设置为一个固定的值或一个渐变。
-
Mode:颜色变化的模式。可以设置为Color或Random Color。
示例代码
// 示例代码:设置粒子系统的Color over Lifetime模块属性
using UnityEngine;
public class ColorOverLifetimeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Color over Lifetime模块
ParticleSystem.ColorOverLifetimeModule colorOverLifetime = particleSystem.colorOverLifetime;
// 启用颜色变化
colorOverLifetime.enabled = true;
// 设置粒子在生命周期中的颜色变化为从黄色到蓝色的渐变
Gradient gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[] { new GradientColorKey(Color.yellow, 0.0f), new GradientColorKey(Color.blue, 1.0f) },
new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) }
);
colorOverLifetime.color = gradient;
// 设置颜色变化的模式为随机颜色
colorOverLifetime.colorMode = ParticleSystemGradientMode.RandomColor;
}
}
详细解释
-
Enabled:这个属性决定了是否启用颜色变化模块。例如,设置
colorOverLifetime.enabled = true
表示启用颜色变化模块。 -
Color:这个属性用于设置粒子在生命周期中的颜色变化。可以设置为一个固定的值或一个渐变。例如,设置
colorOverLifetime.color = gradient
表示粒子从黄色渐变为蓝色。 -
Mode:这个属性决定了颜色变化的模式。可以设置为固定颜色(Color)或随机颜色(Random Color)。例如,设置
colorOverLifetime.colorMode = ParticleSystemGradientMode.RandomColor
表示粒子颜色在渐变范围中随机变化。
Color by Speed模块
基本属性
-
Color:粒子根据速度变化的颜色。可以设置为一个固定的值或一个渐变。
-
Speed Range:速度范围。用于设置粒子速度的变化范围。
示例代码
// 示例代码:设置粒子系统的Color by Speed模块属性
using UnityEngine;
public class ColorBySpeedExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Color by Speed模块
ParticleSystem.ColorBySpeedModule colorBySpeed = particleSystem.colorBySpeed;
// 启用根据速度变化颜色
colorBySpeed.enabled = true;
// 设置粒子根据速度变化的颜色为从红色到蓝色的渐变
Gradient gradient = new Gradient();
gradient.SetKeys(
new GradientColorKey[] { new GradientColorKey(Color.red, 0.0f), new GradientColorKey(Color.blue, 1.0f) },
new GradientAlphaKey[] { new GradientAlphaKey(1.0f, 0.0f), new GradientAlphaKey(1.0f, 1.0f) }
);
colorBySpeed.color = gradient;
// 设置粒子速度的范围为0到10米/秒
colorBySpeed.range = new Vector2(0.0f, 10.0f);
}
}
详细解释
-
Enabled:这个属性决定了是否启用根据速度变化颜色的模块。例如,设置
colorBySpeed.enabled = true
表示启用根据速度变化颜色的模块。 -
Color:这个属性用于设置粒子根据速度变化的颜色。可以设置为一个固定的值或一个渐变。例如,设置
colorBySpeed.color = gradient
表示粒子从红色渐变为蓝色。 -
Speed Range:这个属性用于设置粒子速度的变化范围。例如,设置
colorBySpeed.range = new Vector2(0.0f, 10.0f)
表示粒子速度变化范围为0到10米/秒。在这个范围内,粒子的颜色会根据速度变化。
Size over Lifetime模块
基本属性
-
Size:粒子在生命周期中的大小变化。可以设置为一个固定的值或一个曲线。
-
Separate Axes:是否分离轴。如果启用,可以分别设置X、Y、Z轴的大小变化。
示例代码
// 示例代码:设置粒子系统的Size over Lifetime模块属性
using UnityEngine;
public class SizeOverLifetimeExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Size over Lifetime模块
ParticleSystem.SizeOverLifetimeModule sizeOverLifetime = particleSystem.sizeOverLifetime;
// 启用大小变化
sizeOverLifetime.enabled = true;
// 设置粒子在生命周期中的大小变化为从1到0.5米
sizeOverLifetime.size = new ParticleSystem.MinMaxCurve(1.0f, 0.5f);
// 启用分离轴
sizeOverLifetime.separateAxes = true;
// 分别设置X、Y、Z轴的大小变化
sizeOverLifetime.sizeX = new ParticleSystem.MinMaxCurve(1.0f, 0.5f);
sizeOverLifetime.sizeY = new ParticleSystem.MinMaxCurve(1.0f, 0.5f);
sizeOverLifetime.sizeZ = new ParticleSystem.MinMaxCurve(1.0f, 0.5f);
}
}
详细解释
-
Enabled:这个属性决定了是否启用旋转变化模块。例如,设置
rotationOverLifetime.enabled = true
表示启用旋转变化模块。 -
Rotation:这个属性用于设置粒子在生命周期中的旋转变化。可以设置为一个固定的值或一个曲线。例如,设置
rotationOverLifetime.rotation = new ParticleSystem.MinMaxCurve(0.0f, 360.0f)
表示粒子的旋转从0到360度随机变化。 -
Separate Axes:这个属性决定了是否分离轴。如果启用,可以分别设置X、Y、Z轴的旋转变化。例如,设置
rotationOverLifetime.separateAxes = true
表示启用分离轴。 -
X、Y、Z:这些属性用于分别设置X、Y、Z轴的旋转变化。例如,设置
rotationOverLifetime.x = new ParticleSystem.MinMaxCurve(0.0f, 360.0f)
表示粒子在X轴上的旋转从0到360度随机变化。
Rotation by Speed模块
基本属性
-
Rotation:粒子根据速度变化的旋转。可以设置为一个固定的值或一个曲线。
-
Speed Range:速度范围。用于设置粒子速度的变化范围。
示例代码
// 示例代码:设置粒子系统的Rotation by Speed模块属性
using UnityEngine;
public class RotationBySpeedExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Rotation by Speed模块
ParticleSystem.RotationBySpeedModule rotationBySpeed = particleSystem.rotationBySpeed;
// 启用根据速度变化旋转
rotationBySpeed.enabled = true;
// 设置粒子根据速度变化的旋转为从0到360度
rotationBySpeed.rotation = new ParticleSystem.MinMaxCurve(0.0f, 360.0f);
// 设置粒子速度的范围为0到10米/秒
rotationBySpeed.range = new Vector2(0.0f, 10.0f);
}
}
详细解释
-
Enabled:这个属性决定了是否启用根据速度变化旋转的模块。例如,设置
rotationBySpeed.enabled = true
表示启用根据速度变化旋转的模块。 -
Rotation:这个属性用于设置粒子根据速度变化的旋转。可以设置为一个固定的值或一个曲线。例如,设置
rotationBySpeed.rotation = new ParticleSystem.MinMaxCurve(0.0f, 360.0f)
表示粒子的旋转从0到360度随机变化。 -
Speed Range:这个属性用于设置粒子速度的变化范围。例如,设置
rotationBySpeed.range = new Vector2(0.0f, 10.0f)
表示粒子速度变化范围为0到10米/秒。在这个范围内,粒子的旋转会根据速度变化。
External Forces模块
基本属性
-
Enabled:是否启用外部力模块。如果启用,粒子会受到外部力的影响。
-
Multiplier:外部力的修正系数。用于调整外部力的影响强度。
-
Gravity Modifier:重力修正系数。用于调整粒子受到的重力影响。
示例代码
// 示例代码:设置粒子系统的External Forces模块属性
using UnityEngine;
public class ExternalForcesExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的External Forces模块
ParticleSystem.ExternalForcesModule externalForces = particleSystem.externalForces;
// 启用外部力
externalForces.enabled = true;
// 设置外部力的修正系数为0.5
externalForces.multiplier = 0.5f;
// 设置重力修正系数为0.5
externalForces.gravityModifier = 0.5f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用外部力模块。例如,设置
externalForces.enabled = true
表示启用外部力模块。 -
Multiplier:这个属性用于调整外部力的影响强度。例如,设置
externalForces.multiplier = 0.5f
表示外部力的影响强度为0.5倍。 -
Gravity Modifier:这个属性用于调整粒子受到的重力影响。例如,设置
externalForces.gravityModifier = 0.5f
表示粒子受到的重力影响为默认值的一半。
Noise模块
基本属性
-
Enabled:是否启用噪声模块。如果启用,粒子会受到噪声的影响。
-
Strength:噪声强度。可以分别设置X、Y、Z轴的噪声强度。
-
Frequency:噪声频率。用于设置噪声的变化频率。
-
Scroll Speed:噪声滚动速度。用于设置噪声在空间中的滚动速度。
-
Quality:噪声质量。可以设置为低、中、高或自定义。
-
Octaves:噪声的八度数。用于设置噪声的复杂度。
-
Color Strength:颜色噪声强度。用于设置噪声对粒子颜色的影响。
-
Size Strength:大小噪声强度。用于设置噪声对粒子大小的影响。
-
Rotation Strength:旋转噪声强度。用于设置噪声对粒子旋转的影响。
示例代码
// 示例代码:设置粒子系统的Noise模块属性
using UnityEngine;
public class NoiseExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Noise模块
ParticleSystem.NoiseModule noise = particleSystem.noise;
// 启用噪声
noise.enabled = true;
// 设置噪声强度
noise.strength = new Vector3(1.0f, 1.0f, 1.0f);
// 设置噪声频率
noise.frequency = 1.0f;
// 设置噪声滚动速度
noise.scrollSpeed = new Vector3(0.1f, 0.1f, 0.1f);
// 设置噪声质量为中
noise.quality = ParticleSystemNoiseQuality.Medium;
// 设置噪声的八度数为2
noise.octaves = 2;
// 启用颜色噪声
noise.colorAmount = 0.5f;
// 启用大小噪声
noise.sizeAmount = 0.5f;
// 启用旋转噪声
noise.rotationAmount = 0.5f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用噪声模块。例如,设置
noise.enabled = true
表示启用噪声模块。 -
Strength:这个属性用于设置噪声的强度。可以分别设置X、Y、Z轴的噪声强度。例如,设置
noise.strength = new Vector3(1.0f, 1.0f, 1.0f)
表示X、Y、Z轴的噪声强度均为1。 -
Frequency:这个属性用于设置噪声的变化频率。例如,设置
noise.frequency = 1.0f
表示噪声的变化频率为1。 -
Scroll Speed:这个属性用于设置噪声在空间中的滚动速度。例如,设置
noise.scrollSpeed = new Vector3(0.1f, 0.1f, 0.1f)
表示噪声在X、Y、Z轴上的滚动速度均为0.1。 -
Quality:这个属性用于设置噪声的质量。可以设置为低(Low)、中(Medium)、高(High)或自定义(Custom)。例如,设置
noise.quality = ParticleSystemNoiseQuality.Medium
表示噪声质量为中。 -
Octaves:这个属性用于设置噪声的八度数。八度数越高,噪声越复杂。例如,设置
noise.octaves = 2
表示噪声的八度数为2。 -
Color Strength、Size Strength、Rotation Strength:这些属性用于设置噪声对粒子颜色、大小和旋转的影响强度。例如,设置
noise.colorAmount = 0.5f
表示噪声对粒子颜色的影响强度为0.5。
Collision模块
基本属性
-
Enabled:是否启用碰撞模块。如果启用,粒子会与场景中的物体发生碰撞。
-
Type:碰撞类型。可以设置为World、Local或Custom。
-
Bounce:反弹系数。用于设置粒子碰撞后的反弹程度。
-
** lifetime Loss**:生命周期损失。用于设置粒子碰撞后生命周期的损失比例。
-
Min Kill Speed:最小销毁速度。当粒子速度低于这个值时,粒子会被销毁。
-
Max Kill Speed:最大销毁速度。当粒子速度高于这个值时,粒子会被销毁。
-
Collides With:碰撞对象。可以设置为特定的层或所有层。
-
Bounce Dampening:反弹阻尼。用于设置粒子碰撞后的反弹阻尼程度。
-
Bounce Randomness:反弹随机性。用于设置粒子碰撞后的反弹方向随机程度。
示例代码
// 示例代码:设置粒子系统的Collision模块属性
using UnityEngine;
public class CollisionExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Collision模块
ParticleSystem.CollisionModule collision = particleSystem.collision;
// 启用碰撞
collision.enabled = true;
// 设置碰撞类型为世界空间
collision.type = ParticleSystemCollisionType.World;
// 设置反弹系数为0.5
collision.bounce = 0.5f;
// 设置碰撞后生命周期损失比例为0.1
collision.lifetimeLoss = 0.1f;
// 设置最小销毁速度为1米/秒
collision.minKillSpeed = 1.0f;
// 设置最大销毁速度为10米/秒
collision.maxKillSpeed = 10.0f;
// 设置碰撞对象为特定层
collision.collidesWith = LayerMask.GetMask("Default");
// 设置反弹阻尼为0.5
collision.bounceDampening = 0.5f;
// 设置反弹随机性为0.5
collision.bounceRandomness = 0.5f;
}
}
详细解释
-
Enabled:这个属性决定了是否启用碰撞模块。例如,设置
collision.enabled = true
表示启用碰撞模块。 -
Type:这个属性决定了碰撞类型。可以设置为世界空间(World)、局部空间(Local)或自定义空间(Custom)。例如,设置
collision.type = ParticleSystemCollisionType.World
表示粒子在世界空间中发生碰撞。 -
Bounce:这个属性用于设置粒子碰撞后的反弹系数。例如,设置
collision.bounce = 0.5f
表示粒子碰撞后的反弹系数为0.5。 -
Lifetime Loss:这个属性用于设置粒子碰撞后生命周期的损失比例。例如,设置
collision.lifetimeLoss = 0.1f
表示粒子碰撞后生命周期损失10%。 -
Min Kill Speed 和 Max Kill Speed:这些属性用于设置粒子的最小和最大销毁速度。例如,设置
collision.minKillSpeed = 1.0f
和collision.maxKillSpeed = 10.0f
表示当粒子速度低于1米/秒或高于10米/秒时,粒子会被销毁。 -
Collides With:这个属性用于设置粒子碰撞的对象层。例如,设置
collision.collidesWith = LayerMask.GetMask("Default")
表示粒子只会与默认层的物体发生碰撞。 -
Bounce Dampening 和 Bounce Randomness:这些属性用于设置粒子碰撞后的反弹阻尼和反弹方向随机性。例如,设置
collision.bounceDampening = 0.5f
表示粒子碰撞后的反弹阻尼为0.5,设置collision.bounceRandomness = 0.5f
表示粒子碰撞后的反弹方向有一定的随机性。
Trigger模块
基本属性
-
Enabled:是否启用触发器模块。如果启用,粒子会与场景中的触发器发生交互。
-
Inside:当粒子在触发器内部时的行为。可以设置为Destroy、Callback或None。
-
Outside:当粒子在触发器外部时的行为。可以设置为Destroy、Callback或None。
-
Enter:当粒子进入触发器时的行为。可以设置为Destroy、Callback或None。
-
Exit:当粒子离开触发器时的行为。可以设置为Destroy、Callback或None。
-
Collides With:触发器对象。可以设置为特定的层或所有层。
示例代码
// 示例代码:设置粒子系统的Trigger模块属性
using UnityEngine;
public class TriggerExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Trigger模块
ParticleSystem.TriggerModule trigger = particleSystem.trigger;
// 启用触发器
trigger.enabled = true;
// 设置当粒子在触发器内部时的行为为销毁
trigger.inside = ParticleSystemTriggerMode.Destroy;
// 设置当粒子在触发器外部时的行为为回调
trigger.outside = ParticleSystemTriggerMode.Callback;
// 设置当粒子进入触发器时的行为为销毁
trigger.enter = ParticleSystemTriggerMode.Destroy;
// 设置当粒子离开触发器时的行为为回调
trigger.exit = ParticleSystemTriggerMode.Callback;
// 设置触发器对象为特定层
trigger.collidesWith = LayerMask.GetMask("Default");
}
}
详细解释
-
Enabled:这个属性决定了是否启用触发器模块。例如,设置
trigger.enabled = true
表示启用触发器模块。 -
Inside、Outside、Enter、Exit:这些属性用于设置粒子在触发器内部、外部、进入和离开触发器时的行为。可以设置为销毁(Destroy)、回调(Callback)或无(None)。例如,设置
trigger.inside = ParticleSystemTriggerMode.Destroy
表示当粒子在触发器内部时会被销毁。 -
Collides With:这个属性用于设置触发器对象的层。例如,设置
trigger.collidesWith = LayerMask.GetMask("Default")
表示粒子只会与默认层的触发器发生交互。
Sub Emitters模块
基本属性
-
Enabled:是否启用子发射器模块。如果启用,粒子可以发射其他粒子系统。
-
** Birth**:当粒子出生时发射的子粒子系统。
-
Death:当粒子死亡时发射的子粒子系统。
-
Collision:当粒子发生碰撞时发射的子粒子系统。
-
Trigger:当粒子与触发器发生交互时发射的子粒子系统。
示例代码
// 示例代码:设置粒子系统的Sub Emitters模块属性
using UnityEngine;
public class SubEmittersExample : MonoBehaviour
{
public ParticleSystem particleSystem;
public ParticleSystem subEmitterBirth;
public ParticleSystem subEmitterDeath;
public ParticleSystem subEmitterCollision;
public ParticleSystem subEmitterTrigger;
void Start()
{
// 获取粒子系统的Sub Emitters模块
ParticleSystem.SubEmittersModule subEmitters = particleSystem.subEmitters;
// 启用子发射器
subEmitters.enabled = true;
// 设置当粒子出生时发射的子粒子系统
subEmitters.birth = subEmitterBirth;
// 设置当粒子死亡时发射的子粒子系统
subEmitters.death = subEmitterDeath;
// 设置当粒子发生碰撞时发射的子粒子系统
subEmitters.collision = subEmitterCollision;
// 设置当粒子与触发器发生交互时发射的子粒子系统
subEmitters.trigger = subEmitterTrigger;
}
}
详细解释
-
Enabled:这个属性决定了是否启用子发射器模块。例如,设置
subEmitters.enabled = true
表示启用子发射器模块。 -
Birth、Death、Collision、Trigger:这些属性用于设置当粒子出生、死亡、发生碰撞或与触发器发生交互时发射的子粒子系统。例如,设置
subEmitters.birth = subEmitterBirth
表示当粒子出生时,会发射指定的子粒子系统。
Texture Sheet Animation模块
基本属性
-
Enabled:是否启用纹理动画模块。如果启用,粒子会使用纹理动画。
-
Animation:动画类型。可以设置为Single Row、Multi Row、Random、None等。
-
Cycle Mode:循环模式。可以设置为Loop、Restart或Ping Pong。
-
Frame Over Time:每秒播放的帧数。可以设置为一个固定的值或一个曲线。
-
Frame Over Distance:每单位距离播放的帧数。可以设置为一个固定的值或一个曲线。
-
Start Frame:粒子的初始帧。可以设置为一个固定的值或一个曲线。
-
Frame Rate:帧率。用于设置动画的帧率。
-
UV Channel:UV通道。用于设置纹理动画使用的UV通道。
示例代码
// 示例代码:设置粒子系统的Texture Sheet Animation模块属性
using UnityEngine;
public class TextureSheetAnimationExample : MonoBehaviour
{
public ParticleSystem particleSystem;
void Start()
{
// 获取粒子系统的Texture Sheet Animation模块
ParticleSystem.TextureSheetAnimationModule textureSheetAnimation = particleSystem.textureSheetAnimation;
// 启用纹理动画
textureSheetAnimation.enabled = true;
// 设置动画类型为单行
textureSheetAnimation.animation = ParticleSystemAnimationType.SingleRow;
// 设置循环模式为循环
textureSheetAnimation.cycleMode = ParticleSystemAnimationCycleMode.Loop;
// 设置每秒播放的帧数为10帧
textureSheetAnimation.frameOverTime = new ParticleSystem.MinMaxCurve(10.0f);
// 设置每单位距离播放的帧数为2帧
textureSheetAnimation.frameOverDistance = new ParticleSystem.MinMaxCurve(2.0f);
// 设置粒子的初始帧为0
textureSheetAnimation.startFrame = new ParticleSystem.MinMaxCurve(0.0f);
// 设置帧率为30帧/秒
textureSheetAnimation.frameRate = 30.0f;
// 设置UV通道为0
textureSheetAnimation.uvChannel = ParticleSystemUVChannel.UV0;
}
}
详细解释
- Enabled:这个属性决定了是否启用纹理动画模块。例如,设置
textureSheetAnimation.enabled = true
表