2016-04-13 6 views
-2

Ich habe die Klasse von shelf.cs und GameManager.cs. In der Datei shelf.cs gibt die Methode displayApple eine Zeichenfolge zurück. Dann greift der GameManager auf die Zeichenfolge zu und zeigt sie im Textfeld an.Kann nicht auf Variable in einer anderen Klasse für die Textanzeige zugreifen [Unity]

shelf.cs

public class shelf: MonoBehaviour 
{ 
     //adding all the gameobjects into a list 
     public List<GameObject> players; 

     public string textApp =""; 

     public string displayApple() 
     { 
      for (int i = players.Count - 1; i >= 0; i--) { 
       if (players [i].name == "Apple") { 
        textApp = textApp + players [i].GetComponent<Apple>().type + " " + players [i].GetComponent<Apple>().colour + " " + players [i].GetComponent<Apple>().weight; 
        textApp = textApp + "\n"; 
       } 
      } 
      long_apple= textApp; 
      return long_apple; 
     } 
    } 

dann in GameManager.cs

public class GameManager : MonoBehaviour { 
    Basket bask; 
    public Text text_apple; 

    // Use this for initialization 
    void Start() { 
     text_apple.text = bask.displayApple; //i want to call the method of displayApple to get the string returned. 
     } 
} 

Das Textfeld wird nicht die Zeichenfolge angezeigt werden und es gibt Fehler.

NullReferenceException: Object reference not set to an instance of an object 
GameManager.Start() (at Assets/scripts/GameManager.cs:12) 
+0

"Regal" muss "Regal" – Fattie

+0

anderen als das sein? nichts ist falsch? – whoami

+0

"displayApple" muss "DisplayApple" sein – Fattie

Antwort

0

Sie initialisieren nie die aalen sie in GameManager.cs.

public class GameManager : MonoBehaviour { 
Basket bask; 
public Text text_apple; 

// Use this for initialization 
void Start() { 
    bask = GameObject.Find("BaskNameInHierarchy").GetComponent<Basket>() 
    text_apple.text = bask.displayApple; //i want to call the method of displayApple to get the string returned. 
    } 
} 

können Sie auch die aalen veröffentlichen public Basket bask;. Ziehen Sie dann ein GameObject in den Inspector des GameObject, an dem das Skript angehängt ist.

Auch das Shelf Skript sollte Basket genannt werden, wenn Sie versuchen, displayApple() zu erreichen. Oder umgekehrt: .

+0

es funktioniert jetzt. aber ich habe mich gefragt. Wenn ich die aufrufende Methode verwende, void Start() {long_text = _basket.DisplayApple(); \t \t Debug.Log (long_text);}, es hat nichts in der Konsole. y? Wenn die Funktion ungültig ist, wird – whoami

+0

angezeigt. Ich bin mir nicht sicher, was Sie meinen. Wenn Sie genau so vorgegangen sind, wie Sie getippt haben, sollte 'long_text' angezeigt werden, wenn' DisplayApple() 'etwas zurückgibt. Wenn meine Antwort Ihr Problem gelöst hat, können Sie es als Antwort markieren, damit andere nicht versuchen, ein bereits gelöstes Problem zu lösen. – vonis22

+0

oh. Problem gelöst. vielen Dank für Ihre Zeit – whoami

Verwandte Themen