Jump to content
Unity Insider Forum

Daten von einem Scene zur anderen


TheBuro

Recommended Posts

Guten Abende, ich arbeite neu mit Unity und möchte euch eine Frage stellen.

 

Ich habe jetzt ein Script geschrieben womit ich überprüfe ob ein User seine Login-Daten richtig geschrieben hat. Falls alles gut läuft wird ein User Objekt erzeugt mit seiner id , name, score. Und der Main bereich des Spieles wird angezeigt.

Dieses Objekt würde ich gerne vom Login bereicht(dort wird das Objekt erzeugt) in mein Main Scene bringen damit z.B. id und score dort angezeigt wird.

 

Ich programmiere C#.

Ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen

TheBuro

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das wäre auf jeden Fall für eine statische Variable.

Statische Variablen sind eine von mehreren Möglichkeiten, Daten über Szenenwechsel hinaus zu behalten. In diesem Fall ist es die richtige Wahl, weil es diese Daten programmweit nur einmal geben soll und kein GameObject-Kontext gebraucht wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst auch dein Userobjekt über einen Szenenwechsel hinweg verfügbar machen:

https://docs.unity3d...troyOnLoad.html

 

Man muss dann nur sicherstellen, daß es nicht 2x erzeugt werden kann, z.b. wie Sascha sagte über eine statische Variable (die innerhalb eines szenenübergreifenden Managerobjektes existiert) oder über eine Prüfung, die testet, ob das Userobjekt bereits in der Szene vorhanden ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Variante hatte ich weggelassen mit der Begründung, dass

kein GameObject-Kontext gebraucht wird.

DontDestroyOnLoad gibt einem hier keinen Mehrwert und macht die Struktur des Programmes nur komplexer.

 

Aber wie kann ich die Werte aus den Variabelen verwenden. Also z.B einem Text den Wert des Scores übergeben.

Werte aus Variablen verwenden ist so ungefähr der erste Grundlagenstoff einer jeden Programmiersprache... ich würde daher auf Anfängertutorials oder Einstiegs-Bücher verweisen. Aber falls dir das hilft, ein Beispiel für deinen Kontext:

using UnityEngine;
using UnityEngine.UI;

public class LoginUI : MonoBehaviour
{
 private class LoginObject
 {
public string username;

public LoginObject(string username)
{
  this.username = username;
}
 }

 private static LoginObject login = null;

 [serializeField]
 private InputField usernameField;
 [serializeField]
 private InputField passwordField;

 // Diese Methode mit dem Button aufrufen
 public void Login()
 {
if(IsValidLogin(usernameField.text, passwordField.text)
{
  login = new LoginObject(usernameField.text);
  SceneManager.LoadScene( ... );
}
 }
}

Die Variable "login" und die LoginObject-Klasse sind hier private. Wären sie public, wäre der Zugriff von anderen Klassen aus einfach

print("Username: " + LoginUI.login.username);

Würde aber nicht empfehlen, das so öffentlich zu machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Statische Variablen funktionieren genauso wie normale Variablen. Einzig is der Unterschied wie Sascha bereits oben erklärt hat. Das bedeutet, wenn du zu Beginn (Login) deine Daten aus der Datenbank (oder woher auch immer) bekommst kannst du diese einem Text Element wie auch normale Variablen zuweißen.

 

Pseudocode:

 

Text myText = static Variable (eventuell noch .toString() hinzufügen falls dein Wert != string ist)

 

Edit: Sascha war schneller und ausführlicher :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antworten, ich habe mich leider heute Nacht nicht klar ausgedrückt,

Mein Script sieht ungefähr so aus wie von Sascha.

 

Der Vorgang von meinem Login sieht so aus, es wird durch das Ereignis onClick() des Buttons meine Funktion OnLoginClick() ausgeführt. Wenn die Eintragungen im Input Field richtig waren, wird ein UserInformations Objekt mit den Eigenschaften id,score,name erzeugt(jetzt auch statisch, danke Sascha). Als letztes wird nun die neue Szene geladen :SceneManager.LoadScene("MainGame");

 

bild.png

 

Mein UserInformations Objekt ist aber in der anderen Szene, meine Frage ist nun wie kann ich das Objekt hier in der anderen Szene verwenden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...