2016-07-04 6 views
0

J'essaie de réapparaître un objet à "x" quantité de temps mais quand j'utilise yield et startcourutine cela provoque beaucoup d'erreurs et d'erreurs dans mon code. et au lieu de détruire je veux cacher l'objet et le réactiver quand je le réapparais après le délai. comment est-ce possible si j'ai des tableaux?réapparition de l'unité après le délai

Répondre

1

Pour un respawn direct sur la même position que vous pouvez faire ceci:

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); 
    } 
} 

L'autre classe:

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! Merci le vôtre suivant le code fais ce que je veux mais il justs désactive l'objet et le rend à nouveau. Je veux assigner pour cela la nouvelle position disponible que j'ai et le nouveau type – David

+0

@Alex Affectez donc votre nouvelle position et tapez dans la coroutine 'RespawnObject()'. – Iggy

+0

Non, vous pouvez les appeler à partir de la coroutine (au lieu de SetActive) et passer le gameobject comme paramètre. Ensuite, au lieu d'utiliser 'Instantiate' vous appelez le' SetActive' là (et définissez la position, peu importe si vous faites cela avant ou après 'SetActive'). –