Unity 粒子系统的播放与停止

6
我的 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;
    }
}

逻辑似乎是正确的...检查你的粒子系统对象是否处于活动状态,以及它所绘制的层或位置? - user1169079
@ bubibu - 你确定粒子系统放置正确了吗?我之前遇到过忘记将其父级化或使用错误坐标系的问题。另外,我不会在Update中调用Play,只需调用一次即可。 - Absinthe
谢谢回复。我非常确定它在正确的位置,因为如果我排除掉particleObject.Stop()这一行,粒子将开始播放。 - bubibu
也许你可以尝试禁用粒子系统的 PlayOnAwake 属性。此外,如果你的粒子效果由多个粒子系统组成(超过一个作为 particleObject 的子对象),你可以调用 particleObject.Play(true); - Kardux
你可以尝试使用 if (!particleObject.isPlaying) particleObject.Play(); 吗?我的想法是,由于执行在 Update() 中,动画会在每一帧从头开始播放,限制了粒子的扩散,导致整体效果静态。不过这只是一个尝试。 - Andrea
显示剩余3条评论
2个回答

2
当playAura设置为true时,粒子应该播放,而且日志消息“Running”也会显示出来。由于消息显示出来了,我认为我的逻辑是正确的,但粒子就是不会开始播放。
这是一个逻辑错误。
当调用particleAuraPlay()函数时,playAura被设置为true。
在Update函数中,由于playAura为true,所以particleObject.Play();将在每一帧中被调用。
你不能这样做。每一帧都调用particleObject.Play()实际上什么也不会发生,因为它会尝试在每一帧中播放和停止粒子,导致没有任何粒子存在。
解决方法是检查playAura是否为true,如果是,则调用particleObject.Play();函数,然后将playAura设置为false,这样直到再次调用particleAuraPlay()函数之前,particleObject.Play()函数不会再次被调用。
新的Update()函数修复了逻辑错误:
void Update()
{
    if (playAura)
    {
        Debug.Log("Running");
        particleObject.Play();
        playAura = false;
    }
}

2
在你的particleAuraPlay()函数中,你只需要检查你的ParticleSystem是否正在运行,你可以通过以下代码实现...
 public void particleAuraPlay(){
      if(!particleObject.isPlaying){
          particleObject.Play();
       }     
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接