Jump to content
Unity Insider Forum

ScriptableObjects


chrische5

Recommended Posts

Hallo

Ich habe mal zwei, drei allgemeine Fragen zu dem Thema. Irgendwie machen mir die SO (ScriptableObjects) ein bisschen einen Knoten im Kopf.

Zunächst habe ich eine Weile gebraucht, um überhaupt zu verstehen, was daran so toll sein soll. Jetzt bilde ich mir ein, einen kleinen Schritt gemacht zu haben. Ich nutze sie derzeit als eine Art Datenspeicher-Template.

Um es konkret zu machen: Ich habe einen Spieler und eigentlich alle Daten für diesen in einem Script hinterlegt. Als ich dann aber (nach einem Hinweis hier im Forum) angefangen habe, die Scripte aufzuteilen, also jeweils eins für die Bewegung, eins für die Animation, eins für die Kollisionen usw. hat sich herausgestellt, dass das so irgendwie komisch wird. Zunächst die Frage, ob es überhaupt sinnvoll ist, die Scripte so aufzuteilen? Natürlich sind die alle noch relativ klein, aber es fördert für mich die Übersicht und der Code in der jeweiligen Klasse bleibt überschaubar. Macht ihr das auch so? Ist das überhaupt sinnvoll, wenn verschieden Update-Methoden aufgerufen werden? und und und.

Jetzt habe ich als eine SO-Template für Charaktere und mein Spieler ist natürlich auch ein Character. In diesem Template sind alle wichtigen Daten angelegt (also das übliche: Health, Speed usw.). Jetzt brauchen aber die jeweiligen (oben genannten) Klassen eigentlich alle die konkreten Daten des Spielers. In jeder Klasse gibt es also eine Variable mit entsprechenden Namen und ich weise dann im Editor das SO den jeweiligen Scripten zu. Das funktioniert, fühlt sich aber komisch an. Keine Ahnung warum, aber am liebsten wäre es mir, wenn man dem Spieler das SO einmalig als Komponente oder so übergeben könnte und dann in den Klassen immer direkt darauf zugreift.

Ich weiß nicht, ob ich gerade kompletten Quatsch mache und das Prinzip total falsch verstehe oder ob es eine einfache Lösung des "Problems" gibt.

Habt ihr verstanden, was ich meine?

Danke

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb chrische5:

Zunächst die Frage, ob es überhaupt sinnvoll ist, die Scripte so aufzuteilen?

Immer, ja ist aber immer noch Geschmacksache. Ich habe selbst und habe bis heute noch das Problem sie aufzuteilen, aber derzeit sieht bei mir z.B. so aus.

  • SpaceShip
  • SpaceShipMovement
  • SpaceShipWeapon

Ship hat auch ein ScriptableObject, wo ich die Basic Einstellungen wie Geschwindigkeit, Name usw habe. Die Geschwindigkeit könnte man aber ohne ScriptableObject in den ShipMovement packen, denn da ist das eher interessanter.

Nun sagen wir mal, dass manche nicht bewegen können und stationär sind. Dann kann ich ShipMovement entfernen und schon können sie sich nicht bewegen.
Das ist auf jeden Fall viel besser als alles in einen zu packen.

Ich weise die SOs an den Basescript z.B. SpaceShip zu, Die anderen benutzen getcomponent von SpaceShip und da kann ich auf SO zugreifen. Aber da gibt es mehrere Wege. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

Spaceship nutzt du dann praktisch zum Durchreichen des SO. Ich hätte in meinem Playerscript dann nur eine Variable für das SO und würde von den anderen Scripten dann per GetComponent darauf zugreifen. Interessant. Das scheint mir sinnvoller zu sein, als das gleiche SO jedem Script einzeln zu geben. Versuche ich gleich mal. Ist es definiert in welcher Reihenfolge die Update-Methoden aufgerufen werden?

 

Christoph

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb chrische5:

Ist es definiert in welcher Reihenfolge die Update-Methoden aufgerufen werden?

Nein, auch wenn du eine Script-Ausführungs-Reihenfolge in den Project Settings einstellen kannst. Wenn du das allerdings tust, ist das ein Warnzeichen für schlechte Code-Architektur.

vor 5 Stunden schrieb chrische5:

Zunächst die Frage, ob es überhaupt sinnvoll ist, die Scripte so aufzuteilen?

Ja, aus den von dir im Anschluss genannten Gründen. Allerdings gibt's da noch ein wenig mehr, was man machen kann, mit denen Probleme wie Update-Reihenfolgen gelöst werden. Weiß nicht, ob ich meinen Blogeintrag zu dem Thema schon verlinkt hatte.

Wenn du Komponenten hast, die semantisch zusammenarbeiten, dann ist es immer eine Überlegung Wert, sie das auch technisch tun zu lassen. Mit [RequireComponent], Referenzen untereinander und Events lässt sich z.B. eine Menge machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...