我与玩家和敌人玩游戏。
我还有一个粒子系统,用于播放器何时死亡,如爆炸。 我已经将这个粒子系统制作成预制件,因此每个级别可以多次使用它,因为有人可能会死很多。
所以在我的敌人的脚本中,附着在我的敌人身上,我有:
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);
答案 0 :(得分:2)
没有必要Instantiate
和Destroy
死亡粒子,这将产生大量开销,你可以简单地重播它,当你想要它开始和停止它,当你不需要它
ParticleSystem deathParticleSystem;
private void OnTriggerEnter2D(Collider2D collision)
{
#rest of the code
deathParticleSystem.time = 0;
deathParticleSystem.Play();
}
public void RespawnPlayer()
{
//rest of the code
deathParticleSystem.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);
}
或者您可以enable
和disable
与您的粒子预制相关联的gameObject
public GameObject deathParticlePrefab;
private void OnTriggerEnter2D(Collider2D collision)
{
#rest of the code
deathParticlePrefab.SetActive(true);
}
public void RespawnPlayer()
{
//rest of the code
deathParticlePrefab.SetActive(false);
}
答案 1 :(得分:1)
您可以随时创建一个新脚本并将其分配给预制件,该预制件会在一段时间后销毁它:
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。如果您要实例化对象,那么此脚本在很多场景中都很有用,这样您就不会有大量不必要的对象。