4 votes

La mise à niveau de GetComponent de 4 à 5 ne fonctionne pas

Dans mon Unity 4.3 tout fonctionne bien, mais après la mise à jour vers 5 j'ai un problème avec GetComponent. Pour tester un nouveau GetComponent déprécié, j'ai utilisé le tutoriel officiel.

using UnityEngine;
using System.Collections;
public class test : MonoBehaviour {
public GameObject otherGameObject;
private AnotherScript anotherScript;
void Awake ()
{
    anotherScript = GetComponent<AnotherScript>();
}

void Update ()
{
    Debug.Log("The player's score is " + anotherScript.playerScore);
}
}

Et le deuxième script

 using UnityEngine;
 using System.Collections;
 public class AnotherScript : MonoBehaviour {
 public int playerScore = 9001;
 }

Ceci est seulement pour le test,

J'ai utilisé le même exemple que celui du tutoriel de l'unité. https://unity3d.com/learn/tutorials/modules/beginner/scripting/getcomponent

Après cela, j'ai associé les deux objets dans l'éditeur. Mais le rapport d'exécution est le suivant :

NullReferenceException : La référence de l'objet n'est pas définie comme une instance d'un objet. test.Update () (at Assets/test.cs:22)

dans unity 4.3 fonctionnent bien.

4voto

Alfie Goodacre Points 2431

Vous devriez essayer de récupérer la référence dans la méthode Start. Assurez-vous que les deux test y AnotherScript scripts sont attachés au même GameObject dans l'éditeur, alors le code ci-dessous devrait fonctionner.

using UnityEngine;
using System.Collections;

public class test: MonoBehaviour 
{
    public int playerScore;

    void Start()
    {
        anotherScript = gameObject.GetComponent<AnotherScript>();
    }

    void Update ()
    {
       Debug.Log("The player's score is " + anotherScript.playerScore);
    }
}

Si les deux scripts sont pas attaché au même GameObject, puis l'utiliser :

 anotherScript = GameObject.Find("Name of GameObject AnotherScript is Attched To").GetComponent<AnotherScript>();

3voto

FINDarkside Points 1136

Vous devez utiliser FindObjectOfType<AnotherScript>() si les scripts ne sont pas attachés au même GameObject.

3voto

emrebaris Points 44

Je pense qu'il devrait en être ainsi :

public GameObject otherGameObject;

private AnotherScript anotherScript;

void Awake ()
{
    anotherScript = otherGameObject.GetComponent<AnotherScript>();

}

void Update ()
{
    Debug.Log("The player's score is " + anotherScript.playerScore);
}

}

Et vous devez attacher otherGameObject dans l'éditeur.

2voto

Dahli Points 31

Etes-vous sûr qu'AnotherScript est également attaché au même objet de jeu que celui auquel test-script est attaché ?

La méthode GetComponent ne recherche que les composants attachés aux GameObjects.

Le moyen le plus simple serait certainement de rendre public le membre d'AnotherScript (afin qu'il soit exposé dans l'inspecteur) et de glisser et déposer votre script dedans pour obtenir la référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X