2017-10-23 2 views
0

Ich habe ein seltsames Problem mit meinem Skript auf einem vorgefertigten Objekt angefügt und an eine Schaltfläche angehängt. Ich habe versucht, dieses Problem zu suchen, aber ohne Erfolg.Variable im Skript der Fertigstelle ändert sich nicht in meiner eigenen Methode

Ich werde ein sehr einfaches Beispiel erklären. Ich habe einen Fertig PlayerPrefab, die von einem Skript PlayerSpawn durch die Anweisung erstellt:

Instantiate (playerPrefab, transform.position, Quaternion.identity); 

Also, wenn das Spiel beginnt, wird eine neue Instanz von PlayerPrefab erstellt wird.

zum Fertig angebaute gibt es ein Skript mit einigen privaten Variablen (der Einfachheit halber schreibe ich ein einfaches Skript-Code):

public class ShipClass : MonoBehaviour { 
    float speed; 
    int count; 

    void Start() { 
     speed = 0; 
     count = 0; 
     Debug.Log ("Start executed, speed = " + speed); 
    } 
    void Update() { 
     Debug.Log("speed in Update = " + speed); 
    } 
    public void Push() 
    { 
     speed = 50; 
     count++; 
     Debug.Log("speed in Push = " + speed); 
     Debug.Log("count = " + count); 
    } 
} 

Dann habe ich ein UI-Knopf, mit OnClick-Ereignis, das Fertig Objekt angebracht und Aufruf der Methode Push().

Das Verhalten ist sehr seltsam: Sobald ich das Spiel zum ersten Mal starten, ist die gedruckte Geschwindigkeit von Update() und Push() Methoden 0. Wenn ich aber auf die Schaltfläche in der Benutzeroberfläche klicken, die Geschwindigkeit in Push() -Methode wird 50, aber Update() druckt immer noch 0, als ob wir zwei verschiedene Variablen Geschwindigkeit hätten.

Die zweite Sache ist, dass das Drücken der Taste, die Zählvariable erhöht. Wenn ich das Spiel stoppe und neu starte, wird die Zählvariable nicht in der Start-Methode zurückgesetzt (selbst wenn Start() ausgeführt wird, sieht das Druckprotokoll), sondern beginnt mit dem letzten Wert im vorherigen Lauf. Auch haben wir das gleiche Verhalten wie die Geschwindigkeitsvariable: in Update(), Anzahl bleibt 0, in Push() zählt weiter inkrementieren, wie wir zwei verschiedene "count" Variablen haben.

Ich weiß, dass es aufgrund des vorgefertigten Objekts ist, aber ich weiß nicht, wie sich die Variablen in Update() und eigenen erstellten Methoden anders verhalten.

Vielen Dank im Voraus für die Hilfe.

+0

Snapshots kann helfen. Bitte hängen Sie es an. Und bezüglich Ihrer Variablen müssen Sie Ihren Gleitkommawert wie folgt setzen: speed = 50.0f; Geschwindigkeit = 0.0f. – joreldraw

Antwort

1

Jetzt rufen Sie Push für die Instanz ShipClass, die an das Prefab angeschlossen ist. Was Sie wollen, ist die Instanz ShipClass, die an das instanziierte Objekt angefügt ist.

Vergewissern Sie sich auch im Inspektor, das Prefab aus der OnClick() - Liste der Schaltfläche zu entfernen.

+0

Ja, wenn OP das Befestigungsteil enthält, wäre es offensichtlich, wo das Problem liegt. In seinem Fall erstellt er nur zwei Instanzen von ShipClass one, wenn das Objekt instanziiert wird (seine Komponente ShipClass wird ebenfalls erstellt, auf die er über die Schaltfläche zugreift), und zweitens, wenn er eine neue ShipClass erstellt. Pluto ist richtig, er muss nur die GetComponent-Methode verwenden, um den Verweis auf die ShipClass-Instanz abzurufen, die bereits beim Instanziieren des Prefab erstellt wurde. –

Verwandte Themen