问题
-
当创建两个或多个粒子系统时,即使有相同的属性设置,它们的行为也不同。
原因
这种情况只有在粒子系统中使用了随机范围时才会发生。随机范围由粒子Random Seed决定。
解决方案
可以创建一个脚本(或使用下面的示例脚本),通过ParticleSystem.randomSeed手动设置Random Seed来解决这个问题。 这可以保证随机结果是相同的。
在下面的GIF中,看起来像阴影的粒子实际上是空中粒子的副本,两者使用相同的随机数。
您可以使用此脚本指定setSeedParticles以设置粒子系统的Random Seed。
using UnityEngine; using System.Collections; [ExecuteInEditMode] public class SetParticleSeed : MonoBehaviour { public ParticleSystem[] setSeedParticles; public int ParticleSeed; public bool forceNewSeed; void Start () { if (setSeedParticles.Length > 0) { for(int i = 0; i < setSeedParticles.Length; i++) { setSeedParticles[i].randomSeed = (uint) ParticleSeed; } } } void Update () { if (forceNewSeed) { ParticleSeed = Random.Range(0,int.MaxValue); Debug.Log("Particle seed: " + ParticleSeed); if (setSeedParticles.Length > 0) { for(int i = 0; i < setSeedParticles.Length; i++) { setSeedParticles[i].randomSeed = (uint) ParticleSeed; } } forceNewSeed = false; } } }
更多信息
Random Particle Seed - http://docs.unity3d.com/ScriptReference/ParticleSystem-randomSeed.html