unity3d 粒子系统未通过代码播放

wtlkbnrh  于 2023-04-07  发布在  其他
关注(0)|答案(4)|浏览(175)

我使用这种方法,并尝试了一些其他的,以及但无法发挥粒子系统(即子弹壳)。

public ParticleSystem particleSystem; 

void Start() {
    particleSystem = GetComponent<ParticleSystem>();
}

void Update() {
    particleSystem.Play();
}
eagi6jfj

eagi6jfj1#

不要将播放触发器放在MonoBehaviour的Update()中,因为它会在每一帧上调用播放。
试试这样的方法:

public ParticleSystem particleSystem; 
private bool isPlaying = false;

void Start() {
    particleSystem = GetComponent<ParticleSystem>();
    particleSystem.Clear();    // Reset the particles
}

void Update() {
    if(!isPlaying) {
        particleSystem.Play();
        isPlaying = true;
    }
}

在调用particleSystem.Play()之前使用particleSystem.Clear()也有助于解决粒子问题。
停止和玩粒子系统最简单的方法是去激活和激活粒子系统游戏对象。要做到这一点,控制脚本必须放置在父对象或单独的对象中。

r8xiu3jd

r8xiu3jd2#

你必须确保它还没有播放,否则你会重置它

void Update() {
    if(!particleSystem.isPlaying) particleSystem.Play();
}
mwg9r5ms

mwg9r5ms3#

好吧,经过几个小时的麻烦,我发现操纵粒子系统的最好方法是创建一个空的游戏对象,分配你所做的粒子系统,然后在代码中你想要的部分通过setActivce命令打开和关闭这个游戏对象。我希望它能在某种程度上帮助别人

xfb7svmp

xfb7svmp4#

我发现ParticleSystem组件不喜欢被禁用和启用,例如,当被放入池中并再次检索时。
在从池中取回它们并激活它们的游戏对象后,调用.Play()或.停止()就是不做任何事情.我不得不延迟调用.Play()(或者.Stop(),如果使用PlayOnAwake = true并且我希望它开始停止)直到下一次更新,以确保ParticleSystem实际上被设置为预期状态,或者使用协程,或者在Update中进行连续检查。

相关问题