2016-03-26 11 views
0

Ich habe ein 2D-Spiel, in dem es einen originalen Feindninja gibt.
Ich habe ein Laich-Skript erstellt, um meinen ursprünglichen Ninja zu klonen. Ich platzierte es dann auf meiner Hauptkamera, um meinen Ninja-Klon in der Hauptkameraansicht erscheinen zu lassen. Mein ursprünglicher Ninja hat auch ein Skript, das nach ein paar Sekunden gelöscht wird.
Ich merke, dass das Löschen meines ursprünglichen Ninja dazu führt, dass mein Klon Ninjas nicht erscheint, aber ich möchte alle geklonten Objekte löschen, damit ich mein Projekt nicht überlaufen lasse.
Gibt es einen Weg, wo ich den Spawn-Klon Ninjas löschen kann, ohne den ursprünglichen Ninja zu berühren. Oder meinen ursprünglichen Ninja im Inspektor verstecken, ohne die Spawnklone zu verstecken.
Hier ist mein zerstören ninja Code:Unity3D: Spawnobjekte löschen

private IEnumerator Killninja() { 

    yield return new WaitForSeconds (4f); 
    Destroy (gameObject); 
} 

    void Update() { 
     StartCoroutine (Killninja()); 
    } 
+0

Muss der Hauptninja tatsächlich im Spiel sein oder könnte er nur ein Fertigteil sein? Ansonsten könnten Sie z.B. Fügen Sie ein öffentliches Bool in das Skript ein, wie 'public bool isClone = true;', setzen Sie es im Inspektor auf Original und check in update 'if (isClone) {StartCoroutine ...}' –

+0

Außerdem sollten Sie einen Status bool einschließen um Ihre 'StartCoroutine' herum, so dass es nur einmal startet. Momentan startet es jeden Frame. Es wird immer noch mit dem ersten zerstört, aber Sie wollen nur einen. –

Antwort

0

Wenn Sie nicht Ihre ursprüngliche Ninja in der Szene sein wollen, hat es nicht in der Szene. Ziehen Sie es aus der Szene in den Projekt-Explorer. Dadurch wird ein Prefab des Ninja erstellt. Sie können den Ninja dann aus der Szene löschen.

Jetzt haben Sie ein ObjectSpawner.cs-Skript, das die Aufgabe hat, ein Prefab hervorzubringen. Ninja, wie:

public class ObjectSpawner : MonoBehaviour 
{ 
    public GameObject prefab; 

    void Start() 
    { 
     GameObject.Instantiate(prefab, transform.position, transform.rotation); 
    } 
} 

zuordnen ObjectSpawner zu einem leeren Gameobject in der Szene, und weisen Sie die Ninja Prefab Sie früher sein prefab Feld erstellt. Dies erzeugt einen Ninja, sobald das Spiel beginnt, an der Position deines NinjaSpawner-Objekts.

Ihr Ninja.cs Skript für die Zerstörung der Ninja verantwortlich sein, wenn seine Zeit ist abgelaufen:

public class Ninja : MonoBehaviour 
{ 
    void Start() 
    { 
     StartCoroutine(DestroyDelayed()); 
    } 

    IEnumerator DestroyDelayed() 
    { 
     yield return new WaitForSeconds(4f); 
     Destroy(gameObject); 
    } 
} 

Stellen Sie sicher, dass Skript zu Ihrem Ninja Objekt zugeordnet.

+0

Danke, es hat funktioniert, aber ich möchte mehr als einmal Ninja alle 100 Sekunden spawnen, wie ein Timer, anstatt dass er sofort innerhalb der Hauptkamera erscheint, weißt du, wer das tun soll? Vielen Dank noch einmal, es hat geholfen –

+0

Alles, was Sie brauchen, ist bereits in meinen Beispielen gezeigt. Mischen Sie einfach einen Teil des Codes des zweiten Skripts mit dem Code des ersten Skripts und Sie haben, was Sie brauchen. –

+0

Wird diese Methode immer noch empfohlen, wenn Sie Tonnen von verschiedenen Objekten hervorbringen werden? Werden alle Drag/Drop-Referenzen im Inspektor manuell beibehalten, um Kopfschmerzen zu verursachen? – pspahn