繁体   English   中英

unity ParticleSystem 播放和停止

[英]Unity ParticleSystem Play and Stop

我的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

在更新函数中, particleObject.Play(); 由于playAuratrue每帧都会被调用。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM