以编程方式初始化时销毁粒子系统

我有一个玩家和一个敌人的游戏。


当玩家死亡时,我也有一个粒子系统,比如爆炸。我已经把这个粒子系统做成了一个预制件,所以我可以在每个级别多次使用它,因为有人可能会死很多。


所以在我的敌人.cs 脚本中,附加到我的敌人,我有:


public GameObject deathParticle;


private void OnTriggerEnter2D(Collider2D collision)

    {

        if (collision.name == "Player" && !player.dead){

            player.dead = true;

            Instantiate(deathParticle, player.transform.position, player.transform.rotation);

            player.animator.SetTrigger("Death");

        }

    }

所以当玩家被敌人杀死时,这会播放我的粒子系统。现在在我的播放器脚本上,我有这个。这个特定的功能在死亡动画后播放:


public void RespawnPlayer()

{

    Rigidbody2D playerBody = GetComponent<Rigidbody2D>();

    playerBody.transform.position = spawnLocation.transform.position;

    dead = false;

    animator.Play("Idle");


    Enemy enemy = FindObjectOfType<Enemy>();

    Destroy(enemy.deathParticle);

}

这会像往常一样重生玩家,但是在我每次死的项目中,我都会有一个我不想要的死亡(克隆)对象。最后两行是为了删除它,但它没有。


我也试过这个没有用:


Enemy enemy = FindObjectOfType<Enemy>();

ParticleSystem deathParticles = enemy.GetComponent<ParticleSystem>();

Destroy(deathParticles);


蝴蝶不菲
浏览 163回答 2
2回答

哈士奇WWW

您始终可以创建一个新脚本并将其分配给在一定时间后销毁它的预制件:using UnityEngine;using System.Collections;public class destroyOverTime : MonoBehaviour {&nbsp; &nbsp;public float lifeTime;&nbsp; &nbsp;// Use this for initialization&nbsp; &nbsp;void Start () {&nbsp; &nbsp;}&nbsp; &nbsp;// Update is called once per frame&nbsp; &nbsp;void Update () {&nbsp; &nbsp; &nbsp; &nbsp;lifeTime -= Time.deltaTime;&nbsp; &nbsp; &nbsp; &nbsp;if(lifeTime <= 0f)&nbsp; &nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Destroy(gameObject);&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp;}}因此,在这种情况下,您会将其分配给您的 DeathParticle。如果您正在实例化对象以便没有大量不必要的对象,则此脚本在多种情况下都很有用。
打开App,查看更多内容
随时随地看视频慕课网APP