Ich versuche, ein Element in einer Liste in meinem LevelManager-Skript hinzuzufügen. Es ist für einen Feind, dass wenn er stirbt, ein Prefab seiner Leiche mit den notwendigen Collidern etc. für den LevelManager hinzugefügt wird.Listen in Unity2D - Problem Hinzufügen
Der Feind Skript ist:
using UnityEngine;
using System.Collections;
public class EnemyController : MonoBehaviour {
public Rigidbody2D rb;
public Animator anim;
public GameObject deadGuy;
public LevelManager manager;
// Use this for initialization
void Start() {
rb = GetComponent<Rigidbody2D>();
anim = GetComponent<Animator>();
manager = GetComponent<LevelManager>();
}
// Update is called once per frame
void Update() {
if(anim.GetBool("Dead"))
{
StartCoroutine("Die");
}
}
private IEnumerator Die()
{
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
Instantiate(deadGuy, gameObject.transform.position, gameObject.transform.rotation);
manager.worldObjects.Add(deadGuy);
DestroyObject(gameObject);
}
}
Die Todesanimation spielt und dann wird das Fertig als „Dead Guy (Klon)“ in der Hierarchie hinzugefügt, aber dann die Animation spielt immer mehr prefabs instanziiert. Aber wenn ich diese Codezeile entferne:
Dann wird die Animation abgespielt, das Prefab hinzugefügt und das gegnerische Objekt gelöscht.
Ich denke, dass Sie ein anderes Bool in Ihrem Update brauchen, um die Coroutine nur einmal zu starten. –
Wenn das GameObject zerstört wird, sollte es nicht erneut ausgeführt werden, da das gegnerische Skript an das gegnerische Objekt angehängt ist. Es funktioniert, wenn die Codezeile entfernt wird: manager.worldObjects.Fügen Sie hinzu (deadGuy); so scheint es, dass die Linie verhindert, dass sie die nächste Zeile erreicht, wo sie das gameObject selbst zerstört, wenn es nicht entfernt wird –