Jump to content
Unity Insider Forum

Inventar und Dialogsystem


Recommended Posts

Hallo Leute!

Nach dem ich einiges an Gejammer über ein fehlendes freies Inventarsystem gehört habe, habe ich mich nun aus Langeweile dazu entschlossen ein Inventar und Dialogsystem (Das habe ich nämlich schon so gut wie fertig in der Schublade liegen ;P ) zu erstellen und frei zur Verfügung zu stellen.

Gestern Abend habe ich mit dem inventarsystem angefangen und bin auch schon relativ weit gekommen. Mein derzeitiger Fortschritt sieht so aus:

post-847-0-23446800-1329580920_thumb.png

Ich denke, das meiste sollte selbsterklärend sein.

Jedes Item wird von der Basic Item Klasse abgeleitet, und überschreibt (derzeit) 3 Funktionen:

onRemove (wird aufgerufen sobald das Item aus dem Inventar entfernt wird, also dass es nicht mehr da ist), onUse (Wird beim benutzen aufgerufen) und onDrop(Wenn ein Objekt aus dem Inventar fallen gelassen wird). Der ItemImporter wurde gekapselt, damit ich es etwas leichter habe die automatische Codegenerierung zu implementieren. Automatische Codegenerierung? Ja! Weil die Inventardaten als XML gespeichert werden und ich es etwas friemelig fand die zu schreiben, habe ich einfach ein Tool gebastelt dass das ganze für mich automatisch macht:

 

post-847-0-01480300-1329578502_thumb.png

 

Alles was ihr bis jetzt seht, funktioniert auch einigermaßen.

Wenn ihr ein neues Item erstellt (links unten) wird automatisch der Code generiert, in das richtige Verzeichnis geschoben und bei Bedarf auch gleich der Editor geöffnet. Damit bleibt der Workflow einigermaßen flüssig und einfach. Der Code für die Erstellung des Items (Wer weiß sonst welche ItemID zu welcher Klasse gehört? Richtig, Niemand!) wird dazu auch gleich geupdatet.

Das meist ist schon im Code selber dokumentiert, wenn es also Unklarheiten bei Release geben sollte, sind die erstmal beseitigt.

Meine Frage an euch wäre jetzt: Habt ihr spezielle Wünsche an Funktionen? Was soll das Inventar System können? Ich will ja nicht dass ich hier am eigentlichen Sinn vorbeientwickel oO

Und speziell an Sascha (Oder beliebig anderen Informatikstudenten :P)

Was hättet ihr anders gemacht? Rauft ihr euch bei dieser Struktur die Haare, oder ist der Ansatz ganz okay?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Viele gute Gedanken stecken dahinter, aber du möchtest ja ein bisschen Kritik haben :)

 

Zur Form: Ich nehme an, isImportant ist private.

In ein UML-Diagramm gehören nur Felder und Methoden der Schnittstelle, also in diesem Fall nur die Methoden davon.

 

Dann zum Ansatz selbst: Ich würde definitiv eher zu ScriptableObjects raten als zu xml-Dateien.

ScriptableObjects sind einfach perfekt an den Unity-Workflow angepasst und dem entsprechend entfällt der externe Editor.

Der ist zwar bei deinem Ansatz eine gute Idee, aber wenn man schon den Unity Editor hat, dessen Funktionalität und Oberfläche sich beliebig erweitern lassen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zur Form:

Ja, isImportant ist private. Hab ich aber auch so im Diagramm stehen meine ich.

Zum UML-Diagramm: Danke, das wusste ich nicht. Ist mein erster Einsatz von UML-Diagrammen, da hab ich einfach alles rein geschrieben was mit dem UML-Programm ging^^

 

Ja, ich habe mir vor ca 30 Minuten wieder deinen Blog Eintrag gelesen. Mir scheint auch dass ich mich zu sehr auf XMLs versteife, ganz einfach weil ich damit relativ viel Erfahrung habe. Ich werde jetzt erstmal gucken was sich mit ScriptableObjects alles anstellen lässt, dann werde ich das ganze nochmal umstrukturieren. Evtl kann ich das Nodebasierte Dialogsystem ja auch komplett in Unity verwirklichen...

Edith:

Um mal zu Updaten:

Ich werde jetzt den Scriptable Object Ansatz von Sascha verfolgen. Meine Güte, wie ich mich ärgere dass ich das nicht sofort gemacht habe, danke Sascha oO

Einige Sachen habe ich schon fertig gemacht, fehlt nur noch ein Schöner Inventory Editor, mit dem man bequem Items in Inventorys verwalten kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nachdem ich das ganze ein wenig weiterverfolgt habe, bin ich dann doch auf ein Problem mit Scriptable Objects gestoßen:

Ich will dass ein Benutzer Item-spezifisches Verhalten (wenn das Item z.B. aus dem Inventory entfernt wird) definieren kann. Wie realisiere ich das mit Scriptable Objects? Soweit ich das jetzt erfahren habe kann ich einmal erstellte Assets mit Scriptable Objects nicht verändern (Ausser natürlich die festgelegten Eigenschaften...). Ich will aber eigenen Code z.B. in eine Funktion einfügen können. Hat da jemand eine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem kenne ich.

Die Unity-Variante wäre wohl Komponenten, also eine neue Superklasse, von dessen Typ man eine Variable im ScriptableObject unterbringt... oder so ähnlich.

 

Alternativ kann man dann das machen, was ich momentan bei einem Projekt mache: ScriptableObject > Basisitem (abstrakt) > Items

Dazu habe ich mir einen Wizard geschrieben, der etwas ganz böses tut: Alle Unterklassen von Basisitem raus suchen!

Und mit denen kann man dann mit dem Wizard Assets erstellen.

Da der Wizard nur ein Editor-Tool ist und daher nicht Teil des Codes vom fertigen Spiel ist, schäme ich mich aber auch nicht dafür :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 weeks later...

Nachdem ich mit dem Inventarsystem endlich soweit gekommen bin, dass ich sagen kann "Ab jetzt ist es nur noch Fleißarbeit", widme ich mich dem Dialogsystem. Ich habe derzeit einen wackligen/halbwegs funktionierenden Node-Based Editor hingezaubert. Der nächste Milestone wird das serialisieren des Node-Trees sein und schließlich dann das parsen zu Runtime sein. (Damit nicht alles nutzlos im RAM rumliegt wärend des Spiels)

Da ich kein Writer/Autor bin, mir sozusagen das "Nichtverständnis" des Editors fehlt (Ich habe ihn geschrieben :P ) suche ich bald ein ambitioniertes Projekt das mit mir zusammen den Editor testet und weiterentwickelt. Ich plane, das ganze für 10$ in den Store zu klatschen (Dialogsystem und Inventarsystem), da für das testende Team der Editor und zukünftige Updates natürlich kostenlos sind, hat man somit 10$ gespart. Ich würde mich sehr freuen würde sich jemand dazu bereiterklären. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich will den Asset Store ja nicht vollspammen^^

BTW habe ich mich für die Auslagerung einiger Sachen in einer Seperaten DLL entschieden. Das mache ich mit dem Hintergedanken von MMORPGs die schnell den Client updaten müssen. Somit braucht man nur die DLL austauschen und fertig. Zudem verschafft mir das ganze auch etwas Sicherheit da es zumindest schwieriger ist, an den SourceCode ranzukommen.

Die DLL ist bald bei ca. der Hälfte der Funktionalität angekommen. Ich habe bisher das Einparsen einer XML und die Befüllung eines DialogueFile-Objekts mit den Daten implementiert. Ich muss noch das Serialisieren eines DialogueFile-Objekts implementieren und das Realtime-Parsing als Alternative zum direkten Einparsen implementieren. Danach kann es mit dem Visual Editor weitergehen.

Besteht generell Intresse am Aufbau des ganzen Konstrukts? Dann würde ich das UML-Diagramm, das ich zur Planung benutzt habe hier posten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das testen umfasst derzeit nur das Dialog System. Du kannst mir aber deine E-Mail per PN schicken, dann können wir über das Inventarsystem ein wenig reden ;) Außerdem will ich etwas vom Projekt sehen bevor ich was rausgebe, ich will da schon mit halbwegs professioneller Kritik arbeiten ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 months later...
  • 2 weeks later...

Work in Progress ;) Ich probiere derzeit viele Ansätze aus (:

[ZUSAMMENFÜHRUNG]

 

So, mittlerweile sieht das schon super gut aus. Ich habe hier grade eine erste -zwar noch holprige- lauffähige Version vor mir liegen. Es geht also voran

Ich implementiere jetzt noch Dialogue states (Damit man nicht fÜr jede Wendung in der Geschichte eine eigene Datei erstellen ,muss), dann werde ich den Dialogue Designer im Unity Editor programmieren und dann kann ich auch schon loslegen die Sachen an Alpha-Tester zu verteilen. Soll ja auch später, wenn das Ganze zur VerfÜgung steht rund laufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 1 month later...
  • 3 weeks later...

Heute ein etwas größeres Update (KLICK ZUM UPDATE)!

Es ist ein mittlerweile funktionierendes Questsystem dazugekomme, ich werde mich nun an das Inventarsystem setzen, das Dialogsystem funktioniert jetzt tadellos! Heute konnte ich das ganze auch auf einem fremden Rechner in einem anderem Projekt testen und es hat alles funktioniert (: Nicht mehr viel zu tun!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...