Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Cambio entre escenas

Iniciado por Siam, Febrero 10, 2017, 07:27:43 PM

Tema anterior - Siguiente tema
Buenas tardes.
 
Tengo un menú de pausa, y una de esas opciones es Opciones, que carga de otra escena.
 

SceneManager.LoadScene ("homeOpciones",LoadSceneMode.Additive);

 
Tiene un boton de Atras pero al darle a atras carga la escena desde el principio no desde donde lo dejaste en pausa. No se si me explico. Y no tengo ni idea de como poder solucionar eso.

Cita de: Siam date=1486751263Buenas tardes.
   
   
      Tengo un menú de pausa, y una de esas opciones es Opciones, que carga de otra escena.
   
   

SceneManager.LoadScene ("homeOpciones",LoadSceneMode.Additive);

   
      Tiene un boton de Atras pero al darle a atras carga la escena desde el principio no desde donde lo dejaste en pausa. No se si me explico. Y no tengo ni idea de como poder solucionar eso.
   


Por lo que veo es que tienes una escena donde estan los botones de startgame,etc..(scena00) otra escena donde juegas(scena01) y otra escena donde va si presionas Opciones(scena02)  sí SCENA02 tiene ese codigo, en la opción de la comillas va la escena anterior osea SCENA01 y no la escenaprincipal, deberia funcionar si la SCENA01 es solo 1 y no cuando tienes multiples escenas que es de donde mandas el pause y averiguar el nombre de la escena y dirigirla ahí, de todas formas dime si te sirvio que creo que no entendi y me ha dado curiosidad :D

Creo que entiendo lo que dices xD. Si tengo una escena principal, otra donde empieza el juego y otra para las opciones.
 
A opciones se puede acceder desde la escena principal o desde la escena de juego al dar atras en la escena de opciones vuelve a la escena desde donde la he llamado usando
 



   
      SceneManager.LoadScene (SceneManager.GetActiveScene().name);
   

[/quote]
 
El problema es cuando llevas un rato jugando y por qjemplo tienes x puntos y te vas a opciones y vuelves atras, te vuelve a la escena de juego pero la reinicia. Como si le dieras a juego nuevo. Entonces queria saber si hay alguna manera de que al cargar una escena en modo additive hay alguna manera como de desactivarla en vez de cargar la escena anterior.

Es poque cuando estas en pausa y volves atras no tenes que cargar nada. Podes manejarte de muchas formas, la mas comun es la de congelar el tiempo, todos los objetos que se mueven DEBEN responder dependiendo del tiempo en algun punto (Time.deltaTime por ejemplo). Entonces cuando entras en pausa haces lo siguiente: mostras el menu, congelas en tiempo (Time.timeScale = 0) y listo. Cuando apretas "atras" o "volver al juego" haces el proceso contrario. Seguramente tengas el menu en una escena y la escena jugable en otra, esto tambien es valido si tenes multiples escenas a la vez, pero para mi estas fallando en que cuando salis de un menu o de EL menu cargas una escena.
 
Si tenes varios submenus no los pongas en diferentes escenas mira aca hay un post que trataba de eso:

 
Saludos

Puedes usar SceneManager.UnloadsceneAsync ("nombrescene") o (indexscene) lo que hace es borrar la primera escena con esos datos lo boton en el boton de atras y listo no se reiniciara la scena anterior solo cargaras la scena opciones y cuando vuelvas se destruira, tambien puedes hacer lo que dice ligthbug crear una UI opciones que aparesca cuando time.scaletime=0 y desaparesca cuando ocurre lo contrario :D.

Ahora mismo usare SceneManager.UnloadsceneAsync, pra no tener que cambiar todo y ya que no tengo muchos menus, solo 3. Pero para futuros proyectos veo mucho mas comodo el metodo de ligthbug.
 
Gracias a los dos.

Por añadir una opcion:
 
Crear todos los menus generales que puedan ser accedidos en cualquier momento del juego y con asignarlos como DontDestroyOnLoad()
 
De esta forma solo los instancias 1 vez y se mantienen ahi cambies o no de escena

Visita http://www.programacionwh.com encontraras tutoriales y muchas cosas .


Tambien puedes visitar mi canal de YouTube https://www.youtube.com/channel/UClSCTn0wPN1iFjED0yaoJUA



Febrero 13, 2017, 01:43:32 PM #7 Ultima modificación: Febrero 13, 2017, 01:46:53 PM por Alejandro Navarro
Por aportar mi granito, te recomiendo que crees una clase especial llamada "singleton".

Estas clases, como bien dice ProgramacionWH, se definen como DontDestroyOnLoad() para preservar sus datos, como las vidas, los puntos, inventarios...

De esta manera, los menus los puedes cargar como quieras, bien desde una escena única con el UI, o bien que cada escena tenga un menú, pero al cambiar entre escenas, seguirás teniendo accesibles los datos.

Aquí te dejo un ejemplo de declaración de un Singleton, que deberas asignar a un GameObject Empty:
 

public class GameController : MonoBehaviour
{
    public static GameController instancia = null;
    public int vidas = 3;
    public int puntos;
    void Awake()
    {
        if (!instancia)
        {
            instancia = this;
            DontDestroyOnLoad(this);
        }
        else
            Destroy(gameObject);
    }
}

 
Y desde cualquier script de cualquier escena, puedes acceder a los datos de esta manera:

 
 

if(collision)
{
GameController.instancia.vidas--;
}

 
 
 
Espero que te sirva.
 
Un saludo.

 

Febrero 14, 2017, 04:39:15 PM #8 Ultima modificación: Febrero 14, 2017, 04:39:45 PM por Bryan Murgas
Mira algo muy util es no tener scena para los settings osea , crea un objeto vacio llamdo settings y mete ahi el fondo que ocupas cuando este en ese menu los botones y todo  y ponele que al inicio el objeto llamado settings este en 999
 
 
 
y supongamos que tenes el boton para acceder a ellos en el menu de pausa entonces cuando este pausado y den click en el boton settings
 
ponele que el objeto Settings baje a cierta posicion y asi no tendras lag para cargar de scena a scena y tampoco habra que destruir ninguna scena no se si me entendiste

Etiquetas: