Jump to content
Unity Insider Forum

Allgemeine Fragen über Datenaustausch in Unity


Bradley

Recommended Posts

Mir sind einige Dinge bei Unity noch weiter Unklar, vieleicht könnte mir da einer etwas erhellung bringen.

1) Wie kann ich dich Daten zwischen 2 Scence austauschen ?

Als Beispiel: Im Hauptmenu defeniere ich die größe der Spielwelt und noch ein paar andere Parameter. Im eigentlichen Spiel will ich jetzt diese Daten nutzen, wie komme ich da jetzt dran ?

Unter normalen Code umständen würde ich eine Klasse definieren die ich als Parameter der Startklasse der neuen Scence übergebe. Wie funktioniert so was in Unity ?

2) Täusche ich mich, oder gibt es keine möglichkeit im UnityEditor einer Methode mehr als einen Parameter mitzugeben ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

1) Du hast mehrere Möglichkeiten:

  • Statische Variablen
  • ScriptableObjects als Datencontainer
  • Objekt(e) mit DontDestroyOnLoad

Das ist auch in absteigender Reihenfolge - nimm also am liebsten erstmal eine statische Variable oder zwei. ScriptableObjects sind etwas komplizierter anzuwenden, erlauben dafür aber Injection. DontDestroyOnLoad wird oft als allererstes empfohlen, ist aber keine besonders schöne Sache, und dazu noch unnötig, wenn keine UnityEngine-Komponenten überleben müssen.

2) Wenn du von UnityEngine.Events.UnityEvent redest, dann ja. In der Regel stellt sich bei näherer Betrachtung heraus, dass es für jeden Fall, in dem man mehr Parameter übergeben will, eine architektonisch elegantere Lösung gibt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiß jetzt nicht, wo man es in @Saschas Liste einordnen könnte, vielleicht direkt nach den statischen Variablen.

Aber es gibt auch noch die Möglichkeit, eine zusätzliche Scene beim Start zu laden, welche persistent ist und in welche Objekte reinkommen, welche immer existieren müssen.

Auch hier gibt es Stolperfallen, ich würde also auch eher die statischen Variablen empfehlen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 months later...

Wie sieht es mit dem Datenaustausch inerhalb einer Scence zwischen verschiedenen Scripten aus.

Bin über ein Tutorial über "[SerializeField]" gestolpert und es tut eigentlich das was ich brauche. Es kommt aber wohl dadurch zu ein paar - von mir - ungewollten Effekten.

Andere sachen die ich gesehen habe ware, sagen wir mal sperriger in dem ich das Script via gameObject.Find("NameOfTheGameObjectTarget" )...

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 22.10.2018 um 10:52 schrieb Bradley:

2) Täusche ich mich, oder gibt es keine möglichkeit im UnityEditor einer Methode mehr als einen Parameter mitzugeben ?

Du kannst als Parameter ein ScriptableObject übergeben das dann wiederum beliebig viele Variablen enthalten kann, auf die in der Methode zugegriffen werden kann. Dafür muss die Methode natürlich angepasst sein. Ich kam auf die Idee aber sie gefällt mir nicht besonders, da ich dann in jeder Komponente wo ich so zugreifen will eine spezielle Methode anlegen muss die ScriptableObjects akzeptiert..

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb Sascha:

Die da wären?

Zumindest während des Debbugens im Editor werden die Variablen nicht zurück gesetzt.

Als beispiel starte ich mit 50 Energie. Jede Bewegung zieh mit 1 Energie ab. NAch dem testen bin ich bei 45.

Jetzt ändere ich irgendwa am Code oder sonst etwas und teste neu. Das Spiel startet jetzt nicht mit 50 sondern 45.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Bradley

Kann ich nur empfehlen. Den "Hipple-Stil" und die Architektur Vorlage auf Gitlab von Sascha. Schau es dir mal an!

Hier ist es auch nochmal beschrieben:

https://unity3d.com/de/how-to/architect-with-scriptable-objects

 

@Sascha

Ich hatte übrigens den ValueReferenceDrawer übersehen und fand es schon bisschen unschön das dass im Editor so wucherte mit aufklappbaren Variablen. Habe das dann gestern übernommen und war nochmal begeistert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...