Jump to content
Unity Insider Forum

Planung und Umsetzung von Spielen mit mehreren Leveln


gombolo

Recommended Posts

Hallo Community :)

ich habe ein Objektpool. Dieser Objektpool beinhaltet die Gegner, Powerups, Geschosse und Effekte. Nun kommen diese Sachen in jedem Level vor. Wie organisiere ich die Level? 

Mir geht es jetzt nicht um die Konkrete Umsetzung. Ich würde nur gerne wissen wie man das für das ganze Spiel am Sinnvollsten organsiert?

z.B. gibt es dann eine Szene die sich "Main" nennt und ich packe alles das rein? Währe natürlich toll wenn ich dann aus der Szene "Level 1" und "Level 2" usw. auf die Objekt zugreifen kann. Macht man das so? Welche Tools und Möglichkeiten bietet Unity? 

Danke Euch mal und hoffe auf interessante Vorschläge.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Objektpools musst du in jedem Level neu erstellen, alternativ kannst du auch auch das verwenden: https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

DontDesroyOnLoad sorgt dafür, dass das Objekt beim Wechsel in die neue Scene nicht zerstört wird. Ob sich das bei einem Objektpool lohnt oder ob man das eine Script mit dem Pool einfach in jedes Level einbaut, musst du entscheiden. ;)

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Waswaswaswaswas?

Ich glaube, ihr redet aneinander vorbei und dazu rieche ich noch Halbwissen. Aber vielleicht ist das nur meine verstopfte Nase? 🤔

Also... Im erstem Post redet gombolo von einem "Objektpool". Das klingt für mich erstmal nach einer Ansammlung von Assets - wie ein Bestiarium für Gegner, aber halt auch mit Items und Waffen und so. Oder redest du tatsächlich vom technischen Begriff "Pooling"?

Wie du deine Level gestaltest, ist dir überlassen. Da gibt es keinen "besten" Weg. Szene laden heißt: Alle GameObjects werden gelöscht, die nicht mit DonDestroyOnLoad markiert sind. Und dann werden alle neuen aus der neuen Szene geladen. Mehr nicht. Wenn du die ganzen Rasen-Tiles nicht mehr brauchst und stattdessen lauter Wüsten-Tiles haben willst, dann kannst du das alles in einem Rutsch machen. Sonst ist's halt manuell. Und du kannst deine Objekte ganz nach Belieben selber erstellen und verwalten. Es gibt keinen Grund, alle Objekte auf einmal zu laden und irgendwo in einem technischen Pool aufzubewahren. Du kannst auch einfach deine Szenen bauen und Dinge, die nachspawnen mit Instantiate erstellen. Dabei kann ein Spawner einfach das Prefab referenzieren, das er klonen soll. Eine zentrale Struktur, in der alle Prefabs stecken, ist nicht nötig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ookkk...wenn es keine Grund gibt alle Objekte (alle die im Spiel vorkommen werden) auf einmal zu laden, dann mache ich es immer dann wenn ich ein Level starte. Mir ging es halt auch darum, dass ich den Übergang von Level 1 auf Level 2 auf Level 3 usw... fließend haben wollte und habe aus irgendeinem Grund die Befürchtung, dass mein Spiel genau dann hängt (wenn auch nur paar Millisekunden) 

🙄   

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau... das ganze war gar nicht dein Thema, wollte da aber mal eingreifen ^^

Also... Nacheinander Laden ist in Ordnung und wird oft gemacht. Deine Freunde sind da additives (alte Szene wird nicht entladen) und asynchrones (der Main Thread wird nicht angehalten) Laden. Der SceneManager kann beides. Beim asynchronen Laden muss man halt aufpassen, dass der Ladevorgang auch fertig ist, bevor der Spieler was zu sehen kriegt. Man kann abfragen, ob der Ladevorgang schon fertig ist, und wenn er dann nicht rechtzeitig fertig ist, kann man notfalls das Spiel anhalten und einen kleinen Ladebildschirm anzeigen, auch als Overlay. Man kann dann aber auch durch Testen und Messen Zeiten finden, dass man das einfach recht verlässlich rechtzeitig startet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auch wenn ich noch nicht soweit bin, mit Level wechsel.

Erstmal alle Objekte aller Level auf einen schlag zu laden würde doch bei schwachen PC ganz schön Ressourcen fressen, da alles dann im Arbeitsspeicher liegt etc.

Wenn es immer die gleichen Objekte sind und die Anzahl Konstant bleibt, würde das mit dem DontDesroyOnLoad klappen. Musst dann aber dennoch den Objekten ihre neue Position etc. zuweisen. Kannst natürlich auch alle Level in eine Scene packen, hast doch Platz in Unity.

Sowohl vor dir, hinter dir, neben dir, über dir, unter dir.... dann hast du immer alles Geladen und entweder man kann dann die Level zu Fuß erreichen oder du teleportiert deinen Spieler zu jeden Level Abschnitt.

Oder sowas wie in Minecraft wäre doch auch möglich.

Dort werden die Chunks Geladen, die erreichbar und sichtbar sind.

Also angenommen du betrittst Level 1. Dann wird gleich Level 2 geladen. Kommst ins Level 2, wird Level 3 geladen. Usw.

Also ohne die Zeit zu messen, wann man das nächste Level Ladet, einfach Immer das nächste Level im Hintergrund Laden.

Nur so als Halbwissen Tipp, wie gesagt, so weit bin ich noch nicht. Weiß noch nicht mal ob ich Level mache, oder nur 1 Level das sehr groß ist.... halt bis mein PC abstürztB)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 14 Stunden schrieb Sir_Mathew:

Erstmal alle Objekte aller Level auf einen schlag zu laden würde doch bei schwachen PC ganz schön Ressourcen fressen, da alles dann im Arbeitsspeicher liegt etc.

Das Spiel ist nur für den PC gedacht...und ich denke heutige Rechner haben keine Probleme mit der Menge an Daten die für mein Spiel benötigt werden.

Wenn es immer die gleichen Objekte sind und die Anzahl Konstant bleibt, würde das mit dem DontDesroyOnLoad klappen. Musst dann aber dennoch den Objekten ihre neue Position etc. zuweisen. 

Prefaps haben einen großen Vorteil. Ändere ich was wird die Änderung für alle selben Objekte übernommen. Stell dir vor ich würde die Level mit je einem eigenen GameObjekt erstellen und würde auf die Idee kommen was zu ändern :)

Kannst natürlich auch alle Level in eine Scene packen, hast doch Platz in Unity.

In den ich das Spiel in die einzelnen Level unterteile ist das Leveldesign besser in den Griff zu bekommen. Auch ein anderer kann Level erstellen und ich kann diese zusammenführen. 

Sowohl vor dir, hinter dir, neben dir, über dir, unter dir.... dann hast du immer alles Geladen und entweder man kann dann die Level zu Fuß erreichen oder du teleportiert deinen Spieler zu jeden Level Abschnitt.

Oder sowas wie in Minecraft wäre doch auch möglich.

Dort werden die Chunks Geladen, die erreichbar und sichtbar sind.

Also angenommen du betrittst Level 1. Dann wird gleich Level 2 geladen. Kommst ins Level 2, wird Level 3 geladen. Usw.

Also ohne die Zeit zu messen, wann man das nächste Level Ladet, einfach Immer das nächste Level im Hintergrund Laden.

Für den Levelübergang habe ich schon eine Lösung. Der Übergang funktioniert gut. Jedoch habe ich einen wirklich sehr schnellen Rechner und ich merke nichts beim Levelwechsel, jedoch könnte ein schwächerer Rechner sein Zeit brauchen. In dieser Zeit werde ich die Statistik des letzten Levels zeigen. 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb gombolo:

und ich denke heutige Rechner haben keine Probleme mit der Menge an Daten die für mein Spiel benötigt werden.

Danach kannst du doch nicht denken. Mein PC hab ich 2009 zusammengebaut. Nicht jeder investiert 2.000€ jährlich für sein PC um auf den aktuellen Stand zu sein. Das ist von dir nun mal eine Vermutung weil deine Freunde nun mal alle einen guten PC haben. Das ist unter Freunden ganz normal. Kauft sich einer einen PC wollen Freunde mit halten und kaufen auch einen. In mein Freundeskreis haben diese wenn überhaupt irgendein PC zum Arbeiten. Du siehst wie unterschiedlich der Mensch seine Umgebung einschätzt. Bei 80 Millionen in Deutschland sind gerade mal ca. 1 Millionen 20-29Jährige Männer auf die ein guter PC kommen kann.

Junge Leute die oft noch keine Eigene Familie haben und deshalb ihr Geld in einen PC reinstecken können.

Daher ist es laut meiner Statistic doch relativ gering, das jeder der dein Spiel Spielt, auch einen super PC hat.

Ich kenne nicht mal jemand Persönlich mit einen guten PC. Heute spielt doch jeder nur mit dem Handy:angry:

Öhm ja, was wollte ich eigentlich gleich noch?

Keine Ahnung.

Ahso, zu vermuten das jeder der dein Spiel Zocken möchte ist eigentlich unangebracht.

Am besten schaut du, zu welcher Kategorie und welche Betriebsanforderung es haben könnte.

Schaust dann welche existierende Spiele dort rein passen würde.

Und dann schaut du dir die Verkaufszahlen von den Spiel in Deutschland, Europa und Weltweit an.

Dann hast du eine ungefähre Vorstellung davon, wieviel Potenzielle Gamer für dein Spiel geben könnten, wenn dein Spiel sehr bekannt wird.

Nix desto trotz, viel Glück dabei.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 14.3.2021 um 16:23 schrieb Sir_Mathew:

Nix desto trotz, viel Glück dabei.

:D hey Danke, aber ich habe gar nicht die Absicht das Spiel zu verkaufen. Ich verdiene mein Geld mit ganz anderen Sachen und es reicht mir um gut zu leben ;)

Ich habe einen Job der Kreativität erfordert, aber eine ganz andere Kreativität. Stelle dir vor du hast ein Produkt und die Herstellkosten sind zu hoch, dann kommst du zu mir und ich berate dich. 

Die Spieleprogrammierung ist nur ein Hobby bei der ich so kreativ sein kann wie ich will. Wenn ich mal Zeit habe, dann programmiere ich was. Manchmal mache ich lange nichts, dann wieder was. Wie z.B. mal eine 3D Engine in paar Wochen programmieren 3D Engine und ja ich habe auch Spiele programmiert und noch viele andere Sachen. 

Dann Zeichne und Male ich was...

Wie du sieht liegt meine Priorität nicht darin das Spiel einer möglichst breiten Gruppe zugänglich zu machen. Ich wollte nur mal Unity3D lernen. 🙄

 

EDIT: Bilder gelöscht

 

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb gombolo:

habe gar nicht die Absicht das Spiel zu verkaufen.

Hab ich doch nie gesagt. Verkaufszahlen spiegelt nur in etwas wieviel Gamer es für dein Spiel geben könnte, aber egal.

Und mit dem Esel da kann man echt Geld verdienen? hm. Muss wohl auch mal Malen.

Übrigens das da in meinen Bild ist Philip die Socke:D

Philip_die_Socke.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...