统一粒子系统播放和停止

本文关键字:播放 粒子系统 | 更新日期: 2023-09-27 18:11:58

我的particlesystem.Play()不工作。我花了几个小时研究这个问题,但还是没有弄明白。

每当我的角色击中一个对象时,它将调用函数particleAuraPlay(),并且日志消息"HIT"显示,这意味着该函数被正确调用。

playAura设置为true时,粒子应该播放,并且再次显示日志信息"Running"。由于消息显示,我假设我的逻辑是正确的,但粒子只是不会开始播放。有人能解决我的问题吗?

using UnityEngine;
using System.Collections;
public class ParticleController : MonoBehaviour {
    private bool playAura = false;
    private ParticleSystem particleObject;
    void Start () {
        particleObject = GetComponent<ParticleSystem>();
        particleObject.Stop();
    }

    void Update () {
        if (playAura)
        {
            Debug.Log("Running");
            particleObject.Play();
        }
    }
    public void particleAuraPlay()
    {
        Debug.Log("HIT");
        playAura = true;
    }
}

统一粒子系统播放和停止

当playAura设置为true时,粒子应该播放,并再次播放日志信息"Running"也出现了。因为消息是我假设我的逻辑是正确的,但是粒子就是不能启动玩

是一个逻辑错误。

调用particleAuraPlay()函数时,playAura设置为true

在Update函数中,particleObject.Play();将在每一帧中调用,因为playAuratrue

你不能这样。每一帧调用particleObject.Play(); 实际上不会做任何事情,因为它会尝试在每一帧中播放和停止粒子,导致根本没有粒子。

解决方案是检查playAura是否为true,如果true,调用particleObject.Play();函数,然后将playAura设置为false,以便particleObject.Play();函数不会再次被调用,直到particleAuraPlay()再次被调用。

新的Update()函数修复了逻辑错误:

void Update()
{
    if (playAura)
    {
        Debug.Log("Running");
        particleObject.Play();
        playAura = false;
    }
}

在你的particleAuraPlay()函数中,你只需要检查你的pariclessystem是否正在运行,你可以通过这段代码实现这一点…

 public void particleAuraPlay(){
      if(!particleObject.isPlaying){
          particleObject.Play();
       }     
    }