Unity ParticleSystem播放和停止

时间:2016-10-07 12:12:26

标签: c# unity3d unity5

我的particlesystem.Play()不起作用。我在这个问题上花了几个小时,仍然无法弄明白。

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

playAura设置为true时,粒子应该播放,并且同样会显示日志消息“正在运行”。由于消息显示我认为我的逻辑是正确的但粒子不会开始播放。有谁可以解决我的问题?

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;
    }
}

2 个答案:

答案 0 :(得分:0)

  

当playAura设置为true时,粒子应该再次播放   日志消息&#34; Running&#34;也出现了。由于消息是   显示我认为我的逻辑是正确的,但粒子刚刚开始   打

这是一个逻辑错误。

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

在更新功能中,particleObject.Play();将被称为每一帧,因为playAuratrue

你不能这样做。每个帧调用particleObject.Play(); 实际上不会做任何事情,因为它会尝试播放并停止每个帧中的粒子,从而导致无粒子。

解决方案是检查playAuratrue,如果是true,请调用particleObject.Play();函数,然后将playAura设置为false,在再次调用particleObject.Play();之前,particleAuraPlay()函数不会被再次调用。

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

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

答案 1 :(得分:0)

在您的particleAuraPlay()函数中,您只需要检查ParicleSystem是否正在运行,就可以通过以下代码实现这一目标...

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