为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蝴蝶不菲 2021-06-30 09:00:14
我有一个玩家和一个敌人的游戏。当玩家死亡时,我也有一个粒子系统,比如爆炸。我已经把这个粒子系统做成了一个预制件,所以我可以在每个级别多次使用它,因为有人可能会死很多。所以在我的敌人.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);
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您始终可以创建一个新脚本并将其分配给在一定时间后销毁它的预制件:


using UnityEngine;

using System.Collections;


public class destroyOverTime : MonoBehaviour {


   public float lifeTime;


   // Use this for initialization

   void Start () {


   }


   // Update is called once per frame

   void Update () {

       lifeTime -= Time.deltaTime;


       if(lifeTime <= 0f)

       {

           Destroy(gameObject);

       }

   }

}

因此,在这种情况下,您会将其分配给您的 DeathParticle。如果您正在实例化对象以便没有大量不必要的对象,则此脚本在多种情况下都很有用。


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信