2016-07-04 10 views
0

Ich versuche, ein Objekt zu "x" Zeit zu respawnen, aber wenn ich Ertrag und Startcourutine verwende, verursacht es viele Fehler und Fehler in meinem Code. und anstatt zu zerstören, will ich das objekt verstecken und es wieder aktivieren, wenn ich es nach der verzögerung wiedergebe. Wie ist das möglich, wenn ich Arrays habe?Einheit Respawn nach Verzögerung

Antwort

1

Für eine direkte Respawn auf der gleichen Position, die Sie dies tun können:

public class CrateCrash : MonoBehaviour 
{ 
    ... 

    public void InitRespawn(GameObject toRespawn) 
    { 
     StartCoroutine(RespawnObject(toRespawn, 5.0f)); 
    } 

    private IEnumerator RespawnObject(GameObject toRespawn, float delay) 
    { 
     yield return new WaitForSeconds(delay); 
     toRespawn.SetActive(true); 
    } 
} 

Die andere Klasse:

using UnityEngine; 
using System.Collections; 


public class Crate : MonoBehaviour 
{ 
    CrateCrash manager;  

    public void OnMouseDown() 
    { 
     manager.InitRespawn(gameObject); 

     gameObject.SetActive(true); 

    } 

    public void SetManagerReference(CrateCrash managerRef) 
    { 
     manager = managerRef; 
    }  
} 
+0

Hey gunnar! Danke das dein folgendes Code tue was ich will aber es deaktiviert das Objekt und schaltet es wieder zurück. Ich möchte für sie neue verfügbare Position zuweisen, die ich habe und neuen Typ – David

+0

@Alex So zuweisen Sie Ihre neue Position und geben Sie die 'RespawnObject()' -Coroutine. – Iggy

+0

Nein, Sie können sie von der Coroutine aufrufen (anstelle von 'SetActive') und das Spielobjekt als Parameter übergeben. Dann rufen Sie statt 'Instantiate' den' SetActive' auf (und legen die Position fest, egal ob Sie das vor oder nach 'SetActive' tun). –