2016-05-29 2 views
0

J'essaye de générer une étoile à un intervalle de temps défini dans Unity. Mais je voudrais parent ces étoiles pour ne pas encombrer mon inspecteur.Essayer de définirParent pendant la fonction de mise à jour donne une erreur

Mais quand j'essaye de faire ceci il donne "NullReferenceException: Référence d'objet non définie à une instance d'un objet."

J'ai déjà utilisé ce type de code avec succès auparavant mais pas dans la fonction de mise à jour.

Le code que j'utilise est ci-dessous. Merci pour votre temps et aide à l'avance.

MISE À JOUR:

I utilisé

Debug.Log (obj); 
Debug.Log (starParent); 

pour vérifier si les GameObjects existent ou non. Il trouve starParent mais pas obj.

Donc, le problème est qu'il retourne Null pour le GameObject juste instancié. Cela a-t-il quelque chose à voir avec la fonction de mise à jour?

public class StarSpawner : MonoBehaviour { 

    public Star star; 
    private float spawnRate = 3f; 
    public static float time = 0; 
    private GameObject starParent; 

    void Start() { 
     if (!GameObject.Find ("StarParent")) { 
      new GameObject ("StarParent"); 
     } 

     starParent = GameObject.Find ("StarParent"); 
     SetNextStarTime(); 
    } 

    void Update() { 
     if (Time.timeSinceLevelLoad > time) { 
     Vector3 spawnPosition = new Vector3 (Random.Range (1f, 9f), 7); 
     GameObject obj = Instantiate (star, spawnPosition, Quaternion.identity) as GameObject; 
     obj.transform.SetParent (starParent.transform); 
     SetNextStar(); 
     } 
    } 

    void SetNextStarTime(){ 
     time = Time.timeSinceLevelLoad + spawnRate + Random.Range(0f, 5f); 
    } 

} 
+0

à part le problème ci-dessous: vous ne devriez pas utiliser Mise à jour du tout. C'est juste 'Invoke' (ou' InvokeRepeating') pour les timers dans l'unité – Fattie

Répondre

3
public Star star; 

devrait être

public GameObject star; 
+0

Merci beaucoup! Je regardais au mauvais endroit pour mon erreur. – Mark