TheBuro Geschrieben 30. November 2016 Melden Share Geschrieben 30. November 2016 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 More sharing options...
Sascha Geschrieben 30. November 2016 Melden Share Geschrieben 30. November 2016 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 More sharing options...
TheBuro Geschrieben 30. November 2016 Autor Melden Share Geschrieben 30. November 2016 Ich muss noch hinzufügen das, dass Login Script beim Button Klick ausgeführt wird, über das onClick Ereignis. Danke für den Tipp mit den Statischen Variabelen. Aber wie kann ich die Werte aus den Variabelen verwenden. Also z.B einem Text den Wert des Scores übergeben. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 1. Dezember 2016 Melden Share Geschrieben 1. Dezember 2016 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 More sharing options...
Sascha Geschrieben 1. Dezember 2016 Melden Share Geschrieben 1. Dezember 2016 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 More sharing options...
Damon93 Geschrieben 1. Dezember 2016 Melden Share Geschrieben 1. Dezember 2016 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 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TheBuro Geschrieben 1. Dezember 2016 Autor Melden Share Geschrieben 1. Dezember 2016 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"); 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 More sharing options...
Damon93 Geschrieben 1. Dezember 2016 Melden Share Geschrieben 1. Dezember 2016 na aber dadurch dass deine Objekteigenschaften static sind, sind die in allen Scenen vorhanden?. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TheBuro Geschrieben 1. Dezember 2016 Autor Melden Share Geschrieben 1. Dezember 2016 Ok es hat doch Funktioniert. Ich bedanke mich herzlich bei euch. Mit freundlichen Grüßen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.