Noticias

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

Editor de nivel dentro del juego

Iniciado por kesada7, Diciembre 24, 2017, 06:34:35 PM

Tema anterior - Siguiente tema
Necesito hacer un editor de niveles en runtime muy muy sencillo como el del video que pongo a continuación. Alguien puede guiarme un poco? Sé bastante de unity, he publicado ya 2 minijuegos bastante completos y terminados pero los niveles siempre hechos en el editor. Ni siquiera necesito que sea jugable, solo quiero hacer un nivel como lo harías en el editor normalmente con tiles pero en este caso hacerlo en runtime y poder juardar el diseño y volver a cargarlo. Esto lo podría hacer usando XML creo pero no sé como. En el video creo que queda bastante claro lo que quiero hacer.
 


   
eature=oembed" width="480">

 
 

Hace tiempo hice un editor de nivel en runtime. El tema del editor de niveles es simple, solo tienes que hacer un panel donde tengas los botones de los objetos a poner, al hacer click en el boton seleccionas el prefab a instanciar y lo pones. La cuadrícula hay mil formas de hacerlas, busca una a tu gusto y el tema de guardado es lo "complejo". Para guardar los niveles tienes que hacer un Game Manager, el cual guarde la información en una línea de cada uno de los objetos de la escena, la posición en la que están y su rotación. Esto lo podrías guadar así por ejemplo:
 
(piedra. 12, 2, 13. 0,0,0)
 
Luego juntas todas las líneas en un solo texto y lo guardas como TXT(por ejemplo). Para cargarlo simplemente separa las líneas, cada línea será un objeto. A partir de ahí separas la información de cada línea (con split), una vez separada la información lo instancias.
 
Te dejo un vídeo, este sistema lo hice hace tiempo y es exactamente lo que te he explicado pero en vez de guardarlo en un TXT lo subo a una base de datos.
 


   
eature=oembed" width="480">

 
 

Cita de: leocub58 date=1514140495Hace tiempo hice un editor de nivel en runtime. El tema del editor de niveles es simple, solo tienes que hacer un panel donde tengas los botones de los objetos a poner, al hacer click en el boton seleccionas el prefab a instanciar y lo pones. La cuadrícula hay mil formas de hacerlas, busca una a tu gusto y el tema de guardado es lo "complejo". Para guardar los niveles tienes que hacer un Game Manager, el cual guarde la información en una línea de cada uno de los objetos de la escena, la posición en la que están y su rotación. Esto lo podrías guadar así por ejemplo:
   
   
      (piedra. 12, 2, 13. 0,0,0)
   
   
      Luego juntas todas las líneas en un solo texto y lo guardas como TXT(por ejemplo). Para cargarlo simplemente separa las líneas, cada línea será un objeto. A partir de ahí separas la información de cada línea (con split), una vez separada la información lo instancias.
   
   
      Te dejo un vídeo, este sistema lo hice hace tiempo y es exactamente lo que te he explicado pero en vez de guardarlo en un TXT lo subo a una base de datos.
   
   

      
         
eature=oembed" width="480">
      
   
   
       
   


   

      

          
      
   



Muchas gracias por la ayuda! eso que muestras en el video es exactamente lo que quiero aprender a hacer con la única diferencia de en vez de guardarlo en una base de datos simplemente parsear los datos a un XML. Lo único que en el video veo que puedes instanciar prefabs uno encima de otro... para eso supongo que es hacer la cuadrícula que mencionas no? Es muy dificil? Es que he estado buscando como hacer un grid pero todos los ejemplos que he encontrado no son pensados para hacer esto sino un editor de tiled maps en el editor de unity. Voy a seguir investigando a ver que saco... muchas gracias y Feliz Navidad :)
 
Por cierto tienes ese proyecto subido a Github o algún sitio compartido? Si lo tienes me podría servir echarle un ojo :) 

Podrias hacer lo siguiente -
 
Primero necesitas crear una forma de manejar tus prefabs, esta tiene que adaptarse al juego a tu proyecto, en base a esto creas una clase que sirva para componer la información de cada bloque.
 

public class TileBlock
{
public int Prefab { get; private set; }
public GameObject Refecence { get; private set; }
public int PositionX { get; private set; }
public int PositionY { get; private set; }
public int Rotation { get; private set; }
public TileBlock(int prefab, int x, int y)
    {
   Prefab = prefab;
   PositionX = x;
   PositionY = y;
   Reference = MonoBehaviour.Instantiate(Prefab, PositionX, PositionY);
    }
public void Rotate()
    {
   Rotation += 45;
    }
}

 
Anteriormente deberias tener una manera de obtener los prefabs mediante un ID o cualquier identificador, nombre ObjectID, AssetsID, etc.
 
Luego creas un arreglo de TileBlock -
 

public class TileMap
{
private int Width;
private int Height;
public TileBlock[] Tiles { get; private set; }
public TileMap(int width, int height)
{
   Width = width;
   Height = height;
   Tiles = new TileBlock[Width * Height];
}
public void UpdateMap()
    {
   Recorres cada arreglo para instanciar el objecto -
}
}

 
De a poco vas armando la estructura -
 
Por ultimo, lo unico que te interesaria es el Arreglo de TileBlock, puedes utilizar cualquier forma que creas ocurrente para serializar y guardar -

Etiquetas: