实例化并销毁GameObject / ParticleSystem

时间:2018-01-22 04:18:06

标签: c# unity3d

我目前有一个应该实例化粒子系统并在一段时间后销毁它的脚本,但在实例化对象后,会显示以下错误代码:

  

MissingReferenceException:'ParticleSystem'类型的对象已经存在       被摧毁但你还在试图访问它。       你的脚本应该检查它是否为null或你不应该销毁       对象

脚本目前是这样的:

public class MuzzleFlash : MonoBehaviour {

    public Transform gun;
    public ParticleSystem smoke;
    public ParticleSystem flare;
    public ParticleSystem bullet;
    private float smokeTime = 0.2f;

    private void Update () {
        if (Input.GetButtonDown("Fire1"))
        {
            smokeFun();
            flare.Play();
            bullet.Play();
        }
    }

    void smokeFun()
    {
        Instantiate(smoke, gun);
        Destroy(smoke, smokeTime);
    }
}

如何实例化此粒子系统并将其正确销毁?

1 个答案:

答案 0 :(得分:6)

您正在尝试销毁ParticleSystem变量而不是您实例化的smoke的预制件ParticleSystem

Instantiate函数返回它实例化的任何GameObject。要销毁刚刚实例化的ParticleSystem,你必须实例化它,将它存储在一个临时变量中,然后用该临时变量将其销毁。

void smokeFun()
{
    //Instantiate and store in a temporary variable
    ParticleSystem smokeInstance = Instantiate(smoke, gun);
    //Destroy the Instantiated ParticleSystem 
    Destroy(smokeInstance, smokeTime);
}