Jump to content
Unity Insider Forum
Sign in to follow this  
DrSkillix

Unity Szenenwechsel

Recommended Posts

Hallo Leute! 

ich habe eben erst begonnen mit der Spieleprogrammierung und wollte euch um einen Rat fragen. 

Ich entwickle ein kleines 2D Adventure Spiel indem der Charakter unter anderem einen Computer benutzen soll. Ich habe ein Desktop gezeichnet und alles funktioniert schön und gut. 

Allerdings habe ich für den Wechsel der aktuellen Scene zum Desktop mit einem Szenenwechsel gearbeitet. Problem nun ist, dass wenn ich vom Desktop zurückwechsle, meine Szene samt dem Introdialog etc von Vorne beginnt was ja logisch ist. 

Gibt es da eine besondere Methodik oder würdet ihr das Ganze von Grundauf anders gestalten? Irgendwie muss sowas ja gehen, wenn es Minispiele im Spiel selber gibt, läuft das ja schon über eigene Szenen oder? 

Vielen Dank im Voraus ! 

 

LG Theo

Share this post


Link to post
Share on other sites

Das ist so eine Sache, wo ich selber noch nie "die" Lösung gesehen habe, und ich gehe davon aus, dass es die auch nicht gibt. Gibt also für alles Vor- und Nachteile.

Was recht üblich ist, ist deine Computerszene additiv zu laden. Das bedeutet, dass die vorherige Szene nicht entladen wird, sondern bleibt. Dann kannst du ihre Inhalte manuell deaktivieren, irgendwann die additive Szene entladen und die andere wieder aktivieren. Das Deaktivieren und Reaktivieren der ersten Szene ist hier das problematische. Ich habe gerade noch einmal nachgeschaut... es scheint nach wie vor keinen Weg zu geben, Szenen zu deaktivieren. Du müsstest also sowas machen wie die gesamte Szene einem GameObject unterzuordnen und dann dieses zu deaktivieren.

Alternativ kannst du einfach die zweite Szene lassen und stattdessen z.B. ein Prefab instanziieren. Dabei hast du natürlich dasselbe Problem, dass der Rest der Szene irgendwie auf Pause gesetzt werden muss.

  • Like 1

Share this post


Link to post
Share on other sites

Müsste sowas nicht funktionieren?

private void ActivateScene(string sceneName, bool activate)
{
	var scene = UnityEngine.SceneManagement.SceneManager.GetSceneByName(sceneName);

	foreach(var go in scene.GetRootGameObjects())
	{
		go.SetActive(activate);
	}
}

 

  • Like 1

Share this post


Link to post
Share on other sites

Aber müsste das nicht auch mit additiven Laden der Scene gehen?

Also

Scenemanger.LoadScene ("Deine Computerscene", LoadSceneMode.Additiv)

Glecihzeitig pausierst du deine hauptscene wenn du willst.

Und zurück geht es indem du die Computerscene schließt oder mit
 

 SceneManager.UnloadScene ("Deine ComputerScene");



Ich hatte das zumindest mal so gemacht.
Bei mir ist man auch an ein Terminal gegangen.
Da das nicht viel berchnung erfordert, hatte ein Pausieren bei mir gereicht.

NACHTRAG:
 

habe gerade gesehen das @Sascha dasauch schon aufgegriffen hatte.

Share this post


Link to post
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...
Sign in to follow this  

×
×
  • Create New...