Unity 粒子系统播放和停止

bub*_*ibu 6 c# unity-game-engine

我的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Pro*_*mer 2

当 playAura 设置为 true 时,粒子应该播放,并且日志消息“正在运行”也会再次显示。由于消息显示,我认为我的逻辑是正确的,但粒子只是不会开始播放

这是一个逻辑错误。

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

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

你不能这样做。调用particleObject.Play(); 每一帧实际上不会执行任何操作,因为它会尝试播放并停止每一帧中的粒子,从而导致根本没有粒子。

解决方案是检查 if playAurais true, if true,调用该particleObject.Play();函数然后设置playAurafalse,以便该particleObject.Play();函数不会再次被调用,直到particleAuraPlay()再次调用。

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

void Update()
{
    if (playAura)
    {
        Debug.Log("Running");
        particleObject.Play();
        playAura = false;
    }
}
Run Code Online (Sandbox Code Playgroud)