粒子系统在错误的时间播放

时间:2020-12-20 06:34:42

标签: c# unity3d particle-system

我是 Unity 和编码的新手,正在整理一个小项目来帮助我习惯它。不过我有一个粒子系统的问题。我想要它做的是按住空格键同时播放两个粒子系统,然后松开时停止,但是烟雾粒子系统仅在松开空格键后播放并在我按住时停止又下来了。在我松开空格键后,火焰粒子系统也不会停止。有人可以帮忙吗?

这是代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rocket : MonoBehaviour
{
    public float fuel = 500f;

    public float speed = 100f;

    public Rigidbody rb;

    public ParticleSystem flame;

    public ParticleSystem smoke;

    void Start()
    {
        flame.Stop();

        smoke.Stop();
    }

    void FixedUpdate()
    {
        if (Input.GetKey(KeyCode.Space) && fuel > 0)
        {
            rb.AddForce(Vector3.up * speed);

            float fuelUse = fuel-- * Time.deltaTime;

            flame.Play();

            smoke.Play();
        } 
    }
}

2 个答案:

答案 0 :(得分:0)

GetKey 函数每帧重置你的粒子系统,所以你在释放空格键之前看不到

if (Input.GetKeyDown(KeyCode.Space) && fuel > 0)
    {

        isPressed = true;

        flame.Play();
        smoke.Play();
    }

if (isPressed && fuel > 0)
    {
        rb.AddForce(Vector3.up * speed);

        float fuelUse = fuel-- * Time.deltaTime;
    } 

if (Input.GetKeyDown(KeyCode.Space))
    {

        isPressed = false;

        flame.Stop();
        smoke.Stop();
    } 

答案 1 :(得分:0)

你需要在你的 if 后面加上一个 else

这样,当你不按空格时它会一直停止,但当你按空格并且燃料 >0 时会开始。

在这种情况下,您可以做的一件好事是在 if 中放入一些 Debug.Log() 以检查它何时播放,以便您可以发现其他问题。

例如,您可以添加带有flame.Stop() 和smoke.Stop() 的else 并在其中放入Debug.Log("stop") 并在if 内放入Debug.Log("play") 所以在控制台您将始终知道发生了什么以及出了什么问题