我曾经有过以下粒子系统 .
// In the inspector I drag in the leaf particle system.
public ParticleSystem LeafStormParticleSystem;
private IEnumerator activate(float ActivateFor) {
//Change number of particles to 150
LeafStormParticleSystem.maxParticles = 150;
// LeafStormParticleSystem.
var newEmission = LeafStormParticleSystem.emission;
var rate = newEmission.rate;
rate.constantMin = 20;
rate.constantMax = 21;
newEmission.rate = rate;
现在你可以说,这很简单,增加了粒子的数量 . 现在,这曾经起作用,可能不会因为我一直在阅读的新粒子系统 .
然而,在这个新的粒子系统上,我有一个问题和问题,让它工作 .
Issue
如果我错了,请纠正我,但粒子系统的定义如下
void Start()
{
ParticleSystem ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.startDelay = 5.0f;
main.startLifetime = 2.0f;
}
现在,如果我有3个粒子系统,我该如何指定我指的是哪一个?既然我不能将它定义为公共,并在编辑器中将粒子系统拖到它上面?
Issue B
现在我试着遵循团结在他们的论坛中所说的并做了以下事情
ParticleSystem ps = GetComponent<ParticleSystem>();
var main = ps.main;
main.maxParticles = 150;
// LeafStormParticleSystem.maxParticles = 150;
do not create your own module instances, get them from a ParticleSystem instance UnityEngine.ParticleSystem+MainModule.set_maxParticle
任何有关问题A和B的帮助将不胜感激 .
谢谢
1 回答
Issue A
一次只能将一个ParticleSystem组件附加到任何一个GameObject . 因此,子粒子系统也必须附加到单独的游戏对象(通常是持有第一个粒子系统的GameObject的子对象),它们可以直接放到公共字段上 .
Issue B
您的代码看起来很好,但缺少错误消息的关键部分;
NullReferenceException
告诉您代码中的引用等于NULL
. 在您的情况下,该引用将是用于存储ParticleSystem引用的ps
变量,这可能是因为未将此脚本附加到持有ParticleSystem的GameObject,或者根本没有附加任何ParticleSystem . 在任何一种情况下,请确保脚本和ParticleSystem都附加到同一个GameObject并检查您的引用,如此;