Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Siam en Febrero 10, 2017, 07:27:43 PM

Título: Cambio entre escenas
Publicado por: Siam en Febrero 10, 2017, 07:27:43 PM
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.
Título: Cambio entre escenas
Publicado por: ytinU en Febrero 10, 2017, 07:42:02 PM
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
Título: Cambio entre escenas
Publicado por: Siam en Febrero 10, 2017, 08:01:38 PM
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.
Título: Cambio entre escenas
Publicado por: lightbug en Febrero 10, 2017, 08:21:43 PM
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
Título: Cambio entre escenas
Publicado por: ytinU en Febrero 10, 2017, 08:33:27 PM
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.
Título: Cambio entre escenas
Publicado por: Siam en Febrero 10, 2017, 08:53:15 PM
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.
Título: Cambio entre escenas
Publicado por: ProgramacionWH en Febrero 11, 2017, 06:19:49 PM
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
Título: Cambio entre escenas
Publicado por: Alejandro Navarro en Febrero 13, 2017, 01:43:32 PM
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.

 
Título: Cambio entre escenas
Publicado por: Bryan Murgas en Febrero 14, 2017, 04:39:15 PM
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