Jump to content
Unity Insider Forum

Szenen wechsel - Pokemon-Clone


Bibo
 Share

Recommended Posts

Guten Tag zusammen,

ich zerbreche mir gerade den Kopf wie ich in meinem Pokemon-Clone eine Battle-Scene zum laufen bekomme.

Das Spiel besteht aus 3 Szenen:

Haupt-Scene - darin wird das Script gespeichert, welches die Scenen verwaltet.

Gameplay-Scene - darin kommt der ganze Rollenspiel quatsch. Dialoge, Welter, Quests etc.

Battle-Scene - darin werden die Kampfe ausgetragen.

Nun möchte ich, dass die Gameplay-Scene und die Battle-Scene zu beginn beide geladen werden, jedoch nur die Gameplay-Scene aktiv ist. Das ganze soll dann im Kampf wechseln. Gameplay-Scene inaktiv, Battle-Scene.

So erhoffe ich mir, dass die Kämpfe ohne Ladezeiten auskommen und nach dem Kampf das eigentliche Spiel nahtlos weitergeht. Leider funktioniert das nicht wie gewollt. 

Ist der Ansatz grundlegend fehlerhaft oder ist das ein Problem im Script?

 

Link to comment
Share on other sites

Moin!

Mein letzter Stand ist, dass es nach wie vor keine Möglichkeit gibt, eine Szene zu deaktivieren.

Was du machen kannst, ist alle Root-GameObjects der Szene zu deaktivieren, oder noch simpler, alle Root-GameObjects einem neuen GameObject unterzuordnen. Die zweite Variante ist ganz hübsch, aber es ist auch leider ein bisschen eklig, dass man dann immer drauf aufpassen muss, dass man nirgendwo den Parent auf null setzt, sonst fliegt das betroffene GameObject aus dem Deaktivierungs-System heraus. Naja gut - wenn in deiner theoretisch deaktivierten Szene immer noch irgendetwas passiert, hast du das Problem so oder so.

In beiden Fällen hast du Scene.GetRootGameObjects als Einstiegspunkt. Du musst Variante 2 nämlich nicht unbedingt im Editor machen, sondern kannst in Start oder bei einer anderen Gelegenheit damit alle Objekte raussuchen und einem automatisch generierten GameObject unterordnen.

  • Like 1
Link to comment
Share on other sites

Wenn ich das lese bekomme ich direkt Migräne. Unity, warum nur?

Dann einfach ein Empty-GameObject was der Parent jeder Scene ist und dort alles rein. Dann kann ich es bei belieben aktivieren, bzw. deaktivieren. Das hat wenigstens den Vorteil, dass alle NPC´s nach dem Kampf dort sind, wo diese vor dem Kampf waren. Oder ich könnte eben so gut auf eine Battle-Scene verzichten und diesen Kampfbereich irgendwo im Level "verstecken" und dann nur mit der Kamera dort hin "schwenken". Oder ich.....aaahh....Migräne...

 

Link to comment
Share on other sites

Ich gehe davon aus, dass du eine 3D Variante baust.
In dem Fall würde ich die Battleszene irgendwo hin bauen, wor der Spieler bei seinem Rollenspiel nicht hinkommen kann. Die kann ja ruhig ein paar km weit weg sein, oder über der Welt und darunter.
Beide Szenerien haben je eine Kamera und beim Wechsel wird einfach die entsprechende Kamera aktiv und filmt dann das gewünschte Geschehen. Du kannst natürlich auch die Kamera immer zur gewünschten Position hin teleportieren und ausrichten. Ist vielleicht sogar besser, wegen dem Audiolistener, der nur einmalig in der Szene sein soll.
 

Link to comment
Share on other sites

Ich würde nur halt wollen, dass der Teil des Spiels, in dem ich wegen des Kampfes gerade nicht bin, eingefroren ist. Ich hätte keine Lust auf die Art von Bugs, die entstehen kann, wenn da noch irgendwelche Logik im Hintergrund weiter läuft.

Link to comment
Share on other sites

Tatsächlich habe ich es gemacht wie malzbie vorgeschlagen hat. Dabei setze ich den Transform der Spielfigur einfach auf einen punkt in der Arena, speichere vorher jedoch die letzte Position des Spielers, damit er nach dem Kampf dort nahtlos weiter spiele kann. Somit kann ich nicht "Opfer" von irgendwelchen Ereignissen in der Spielwelt werden. Aber ob mir diese Option gefällt bin ich mir gerade noch unsicher. 

Alternativ könnte ich den Spielecharacter noch etwas "zerlegen". Zumindest soweit, dass ich nur die wichtigsten Informationen (Exp, HP etc.) aktiviert habe und den Rest einfach deaktivieren kann (Collider, Models, Animator etc.). Aktuell muss ich nämlich diverse Skripte und Components vor und nach jedem Kampf aktivieren, bzw. deaktivieren. Das sind schon wieder einige potentielle Fehlerquelle.

In die Arena hätte ich dann einfach einen Spieler-Dummy gepackt. Bis auf ein paar Animationen, wenn überhaupt, macht der ja nix.

Link to comment
Share on other sites

Ich würde mir da jetzt nicht son Kopp machen, denn du wirst später irgendwann erkennen, dass ein Gang ins Menü das Spiel pausieren muss. Und auch da wirst du irgendwie gewisse Dinge anhalten müssen. Klar du kannst die Time.time auf 0 stellen. Das hält aber nicht alles an, was schon am tun ist. Wie z.B. Sounds.
Also wirst du ein Event oder eine static Variable nutzen um die Pause auszuwerten. Genau so kannst du das auch mit dem Battle machen.

Sobald der Kampf beginnt, wird z.B. eine static Variable "battle" auf true gesetzt. Diese Variable wird in allen wichtigen Scripts der Rollenspielwelt abgefragt.
Z.B. gleich als erstes in der Update().
 

if(dingensScript.battle) 
  return;

Und schon wird alles nachfolgende in dem Script nicht mehr ausgeführt.
Du musst also nicht unbedingt ganze Komponenten deaktivieren.

Ich würde auch einen Dummy-Charakter für die Battlewelt nutzen, denn da steuerst du ja nichts aktiv.

Das ist aber alles eine Sache des Spieldesigns und das ist die Schwierigkeit daran. Du musst dir überlegen, wie du gewisse Dinge steuern willst. Außerdem musst du dir jetzt schon Gedanken darüber machen, ob sich mit deinem Konzept auch noch Spielerweiterungen einfügen lassen, ohne extremen Mehraufwand zu generieren.

Oft ist es so, dass das Konzept nicht gut genug ist und dann muss man nach einer besseren Lösung suchen und alles umstellen. Passiert mit auch immer wieder mal.
Aber so ist das eben in der Entwicklung. Man denkt selten an alles. :)

 

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
 Share

×
×
  • Create New...