内置粒子系统的脚本接口。Unity 功能强大且用途广泛的粒子系统实现。
常规参数
粒子系统的常规参数保存在一个特殊的 Main 模块中。这些参数在 Inspector 中所有其他模块的上方可见。
在脚本中,可以通过 ParticleSystem.main 访问这些参数。
访问模块属性
粒子系统属性按其所属的模块进行分组,例如 ParticleSystem.noise 和 ParticleSystem.emission。这些属性是结构体,但其行为与普通的 C# 结构体不同。它们只是与本机代码的直接接口,因此与普通的 C# 结构体相比,了解如何使用它们非常重要。
主要区别在于,无需将结构体重新赋值回 Particle System 组件。当您设置模块结构体上的任何属性时,Unity 会立即将该值分配给粒子系统。
此外,由于每个模块都是一个结构体,因此必须先将其缓存在局部变量中,然后才能为该模块分配任何新值。例如,不要使用
ParticleSystem.emission.enabled = true; // 无法编译
而应使用
var emission = ParticleSystem.emission; // 将模块存储在局部变量中
emission.enabled = true; // 将新值直接应用于粒子系统
模块效果乘数
每个模块都具有特殊的乘数属性,允许您更改曲线的整体效果,而无需编辑曲线本身。这些乘数属性都以其影响的曲线命名 - 例如 ParticleSystem.emission.rateMultiplier 控制给定系统中 ParticleSystem.emission.rate 的整体效果。
常量值速记
参数支持用于简单常量值的速记表示法。要为参数设置常量值,您只需为其分配一个数字即可。无需在 ParticleSystemCurveMode.Constant 模式下创建 MinMaxCurve 或 MinMaxGradient 对象。
例如,不要使用
var emission = ParticleSystem.emission;
emission.rate = new ParticleSystem.MinMaxCurve(5.0f);
而应使用
var emission = ParticleSystem.emission;
emission.rate = 5.0f;
性能说明:当设置粒子模块上的属性时,设置会立即传递到本机代码中。这提供了最佳性能。这意味着设置模块结构体上的属性不会在脚本中设置某些内容,这些内容需要设置回粒子系统;所有操作都会自动完成。
其他资源:Particle。
collision | 粒子系统的 CollisionModule 的脚本接口。 |
colorBySpeed | 粒子系统的 ColorByLifetimeModule 的脚本接口。 |
colorOverLifetime | 粒子系统的 ColorOverLifetimeModule 的脚本接口。 |
customData | 粒子系统的 CustomDataModule 的脚本接口。 |
emission | 粒子系统的 EmissionModule 的脚本接口。 |
externalForces | 粒子系统的 ExternalForcesModule 的脚本接口。 |
forceOverLifetime | 粒子系统的 ForceOverLifetimeModule 的脚本接口。 |
has3DParticleRotations | 确定粒子系统是否仅围绕 Z 轴旋转其粒子,或者系统是否为 X、Y 和 Z 轴指定单独的值。 |
hasNonUniformParticleSizes | 确定粒子系统是否对宽度和高度(以及使用网格时的深度)使用单个值,或者系统是否为每个轴指定不同的值。 |
inheritVelocity | 粒子系统的 InheritVelocityModule 的脚本接口。 |
isEmitting | 确定粒子系统是否正在发射粒子。当发射模块完成、已暂停或使用 Stop 且带有 StopEmitting 标志停止系统时,粒子系统可能会停止发射。通过调用 Play 恢复发射。 |
isPaused | 确定粒子系统是否已暂停。 |
isPlaying | 确定粒子系统是否正在播放。 |
isStopped | 确定粒子系统是否处于停止状态。 |
lifetimeByEmitterSpeed | 粒子系统 Lifetime By Emitter Speed 模块的脚本接口。 |
lights | 粒子系统的 LightsModule 的脚本接口。 |
limitVelocityOverLifetime | 粒子系统的 LimitVelocityOverLifetimeModule 的脚本接口。 |
main | 访问主要的粒子系统设置。 |
noise | 粒子系统的 NoiseModule 的脚本接口。 |
particleCount | 当前粒子数量(只读)。此数量不包括子粒子系统的粒子。 |
proceduralSimulationSupported | 确定此系统是否支持过程模拟。 |
randomSeed | 覆盖用于粒子系统发射的随机种子。 |
rotationBySpeed | 粒子系统的 RotationBySpeedModule 的脚本接口。 |
rotationOverLifetime | 粒子系统的 RotationOverLifetimeModule 的脚本接口。 |
shape | 粒子系统的 ShapeModule 的脚本接口。 |
sizeBySpeed | 粒子系统的 SizeBySpeedModule 的脚本接口。 |
sizeOverLifetime | 粒子系统的 SizeOverLifetimeModule 的脚本接口。 |
subEmitters | 粒子系统的 SubEmittersModule 的脚本接口。 |
textureSheetAnimation | 粒子系统的 TextureSheetAnimationModule 的脚本接口。 |
time | 以秒为单位的播放位置。 |
totalTime | 以秒为单位的总播放时间,包括“开始延迟”设置。 |
trails | 粒子系统的 TrailsModule 的脚本接口。 |
trigger | 粒子系统的 TriggerModule 的脚本接口。 |
useAutoRandomSeed | 控制粒子系统是否使用自动生成的随机数来播种随机数生成器。 |
velocityOverLifetime | 粒子系统的 VelocityOverLifetimeModule 的脚本接口。 |
AllocateAxisOfRotationAttribute | 确保已分配 axisOfRotations 粒子属性数组。 |
AllocateCustomDataAttribute | 确保已分配 customData1 和 customData2 粒子属性数组。 |
AllocateMeshIndexAttribute | 确保已分配 meshIndices 粒子属性数组。 |
Clear | 删除粒子系统中的所有粒子。 |
Emit | 立即发射 count 个粒子。 |
GetCustomParticleData | 获取自定义每个粒子数据的流。 |
GetParticles | 获取此粒子系统的粒子。 |
GetPlaybackState | 返回与粒子系统的当前内部状态相关的所有数据。 |
GetTrails | 返回与粒子系统轨迹的当前内部状态相关的所有数据。 |
IsAlive | 粒子系统是否包含任何活动粒子,或者它是否会产生更多粒子? |
Pause | 暂停系统,以便不再发射新粒子,并且不更新现有粒子。 |
Play | 启动粒子系统。 |
SetCustomParticleData | 设置自定义每个粒子数据的流。 |
SetParticles | 设置此粒子系统的粒子。 |
SetPlaybackState | 使用此方法和对 ParticleSystem.GetPlaybackState 的早期调用的结果,以便将粒子系统恢复到 playbackState 对象中存储的状态。 |
SetTrails | 使用此方法和对 ParticleSystem.GetTrails 的早期调用的结果,以便将粒子系统恢复到 Trails 对象中存储的状态。 |
Simulate | 通过在给定时间段内模拟粒子来快速转发粒子系统,然后将其暂停。 |
Stop | 使用提供的停止行为停止播放粒子系统。 |
TriggerSubEmitter | 触发粒子系统所有粒子上的指定子发射器。 |
ResetPreMappedBufferMemory | 重置用于高效渲染粒子系统的预留图形内存的缓存。 |
SetMaximumPreMappedBufferCounts | 限制 Unity 为高效渲染粒子系统预留的图形内存量。 |
gameObject | 此组件所附加到的游戏对象。组件始终附加到游戏对象。 |
tag | 此游戏对象的标签。 |
transform | 附加到此 GameObject 的 Transform。 |
hideFlags | 对象是否应隐藏、与场景一起保存或可由用户修改? |
name | 对象的名称。 |
BroadcastMessage | 在该游戏对象或其任何子对象中的每个 MonoBehaviour 上调用名为 methodName 的方法。 |
CompareTag | 将 GameObject 的标签与定义的标签进行比较。 |
GetComponent | 获取与指定组件位于同一 GameObject 上的类型为 T 的组件的引用。 |
GetComponentInChildren | 获取与指定组件位于同一 GameObject 上的类型为 T 的组件的引用,或获取 GameObject 的任何子对象的引用。 |
GetComponentIndex | 获取组件在其父 GameObject 上的索引。 |
GetComponentInParent | 获取与指定组件位于同一 GameObject 上的类型为 T 的组件的引用,或获取 GameObject 的任何父对象的引用。 |
GetComponents | 获取与指定组件位于同一 GameObject 上的所有类型为 T 的组件的引用。 |
GetComponentsInChildren | 获取与指定组件位于同一 GameObject 上的所有类型为 T 的组件的引用,以及 GameObject 的任何子对象的引用。 |
GetComponentsInParent | 获取与指定组件位于同一 GameObject 上的所有类型为 T 的组件的引用,以及 GameObject 的任何父对象的引用。 |
SendMessage | 在该游戏对象中的每个 MonoBehaviour 上调用名为 methodName 的方法。 |
SendMessageUpwards | 在该游戏对象和行为的每个祖先上的每个 MonoBehaviour 上调用名为 methodName 的方法。 |
TryGetComponent | 获取指定类型的组件(如果存在)。 |
GetInstanceID | 获取对象的实例 ID。 |
ToString | 返回对象的名称。 |
Destroy | 移除一个游戏对象、组件或资源。 |
DestroyImmediate | 立即销毁对象 obj。强烈建议使用 Destroy 代替。 |
DontDestroyOnLoad | 加载新场景时不要销毁目标对象。 |
FindAnyObjectByType | 检索任何已加载的类型为 type 的活动对象。 |
FindFirstObjectByType | 检索第一个已加载的类型为 type 的活动对象。 |
FindObjectsByType | 检索所有已加载的类型为 type 的对象的列表。 |
Instantiate | 克隆对象 original 并返回克隆体。 |
InstantiateAsync | 捕获原始对象(必须与某些游戏对象相关)的快照,并返回 AsyncInstantiateOperation。 |
bool | 对象是否存在? |
operator != | 比较两个对象是否引用不同的对象。 |
operator == | 比较两个对象引用是否指向同一个对象。 |