Noticias

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

Bloquear un objeto por el que ya he pasado

Iniciado por Argo214, Diciembre 11, 2015, 10:03:09 PM

Tema anterior - Siguiente tema
Diciembre 11, 2015, 10:03:09 PM Ultima modificación: Diciembre 11, 2015, 10:04:07 PM por Angelsm
Buenas!Estoy trabajando en un juego en el que tengo una escena base donde he situado varios objetos (a modo de puertas) de tal forma que al colisionar con ellos entro en otras escenas. El problema que tengo es que cuando he recogido los objetos de esa otra escena y vuelvo a la escena base para salir por otra puerta y seguir jugando, me gustaría que las puertas que ya he usado estuvieran bloqueadas y ya no pudiera entrar de nuevo. Cómo podría bloquear estas "puertas" usadas??Gracias!

Desactivando el script que contenga la puerta para abrirse.

Sí, pero al volver a la escena base todos los valores se respetan y hace falta que recuerde que ya se usó esa puerta. Necesito ayuda con el código 

Diciembre 12, 2015, 10:14:59 AM #3 Ultima modificación: Diciembre 12, 2015, 10:36:39 AM por kaito
Se me ocurren varias formas:1) Utilizando Playerprefs, que escribe sobre el archivo de registro. Inconveniente, aumentas el tamaño del archivo de registro para cosas que realmente no se debería utilizar. El archivo de registro lo dejaría para cosas de configuración o actualización(versión, pantalla, ... ) del juego.2) En lugar de utilizar varias escenas con Aplication.LoadLevel o Application.LoadLevelAdditive, que no te permiten mantener las modificaciones al cambiar de escena, si no son muchas subescenas se podría crear grupos emparentados de cada escena, para poder activar/desactivar los grupos de GameObjects(escenas). Esto si que mantendría los cambios al cambiar de escena.3) Podrías utilizar Application.LoadLevel y mantener los cambios, utilizando una clase estática que almacene los datos en un dictionary o cualquier otro tipo de clase. En la primera escena inicial, establecemos los valores del juego, y al cambiar de escena podemos modificar/leer/escribir esos datos.4) Puedes crear una clase serializada para cada escena, y almacenar los datos en un archivo. Primero, guardas en uno o varios archivo los valores iniciales de todos los escenarios. Este archivo irá en la instalación del juego. Luego, cuando ejecutas el juego por primera vez o cada vez que lo ejecutas se crean copias en archivos separados, diferente al de la instalación, que podrás leer/modificar/guardar.

Diciembre 12, 2015, 12:55:03 PM #4 Ultima modificación: Diciembre 12, 2015, 12:57:17 PM por Angelsm
Algo como esto? El resto de las opciones que comentas se me escapan un poco... using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class SalirZona : MonoBehaviour {
    
    private int zona1;
    private int zona2;
private int zona3;
    
    void Start ()
    {
        zona1 = PlayerPrefs.GetInt("zona1");
        zona2 = PlayerPrefs.GetInt("zona2");
        zona3 = PlayerPrefs.GetInt("zona3");
    }
    
    void OnTriggerEnter(Collider other)
    {
        
        if (other.gameObject.tag == "zona1"){
            other.gameObject.SetActive(false);
            if (zona1 == 1)
                return;

            Application.LoadLevel("level1");
            PlayerPrefs.SetInt("zona1", 1);
        }
        
        if (other.gameObject.tag == "zona2"){
            other.gameObject.SetActive(false);
            if (zona2 == 1)
                return;

            Application.LoadLevel("level2");
            PlayerPrefs.SetInt("zona2", 1);
        }
        if (other.gameObject.tag == "zona3"){
            other.gameObject.SetActive(false);
            if (zona3 == 1)
                return;
            
            Application.LoadLevel("level3");
            PlayerPrefs.SetInt("zona3", 1);
        }
        
    }
}

Etiquetas: