Noticias

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

Generación personaje 2d

Iniciado por power, Abril 27, 2018, 02:55:57 PM

Tema anterior - Siguiente tema
Hola a todos.
 
Estoy haciendo un juego 2d para movil, quiero hacer un pequeño configurador de personaje, en el cual podrás cambiar el pelo, la cara y alguna cosa mas. ¿Es posible que en el momento en que el usuario termine la generación, yo pueda generar un sprite que combinará las capas que haya seleccionado (pelo + cara + cabeza), y lo guarde en el dispositivo? De esta manera, cuando se cargue el perfil, puedo cargar ese sprite, y ya meterlo en el esqueleto que voy a usar para animarlo.
 
Si alguien puede decirme por donde tirar para hacer esto, lo agradecería.
 
Saludos
 
 

se me ocurren dos formas de hacerlo: tomandole una foto con la camara, o dibujando las partes sobre un bitmap... aunque con la camara tienes q volver transparentes los pixeles del fondo

Gracias tron. He encotnrado algo aqui:
 
https://answers.unity.com/questions/1008802/merge-multiple-png-images-one-on-top-of-the-other.html
 
Cuando averigüe como hacerlo, lo postearé por aquí
 
un saludo!

Creas una nueva Texture2D luego ordenas todas las imágenes situando las últimas al inicio de un arreglo, luego recorres el arreglo y copias los pixeles a la textura nueva, esto requiere de que todas las imágenes tengan un mismo tamaño, y si no tendrías que realizar un offset.
 
 

algo asi:
 


Texture2D mixInOne(Texture2D cabeza, Texture2D cara, Texture2D pelo) {
texture2D result = new Texture2(cabeza.width, cabeza.height);//nueva textura
for (int x = 0; x < cabeza.width; x++) {
       for (int y = 0; y < cabeza.height; y++) {      
      result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner primera "capa" (cabeza)
      if  (cara.GetPixel(x,y).a > 0.5f) {//color alpha mayor...
         result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner segunda "capa" (cara)
      } else if (pelo.GetPixel(x,y).a > 0.5f) {
         result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner tercera "capa" (pelo)
      }
   }
}
return result;
}

 
 

Cita de: Igor date=1524910304algo asi:
   
   


Texture2D mixInOne(Texture2D cabeza, Texture2D cara, Texture2D pelo) {
texture2D result = new Texture2(cabeza.width, cabeza.height);//nueva textura
for (int x = 0; x < cabeza.width; x++) {
       for (int y = 0; y < cabeza.height; y++) {      
      result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner primera "capa" (cabeza)
      if  (cara.GetPixel(x,y).a > 0.5f) {//color alpha mayor...
         result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner segunda "capa" (cara)
      } else if (pelo.GetPixel(x,y).a > 0.5f) {
         result.SetPixel(x,y, cabeza.GetPixel(x,y));//poner tercera "capa" (pelo)
      }
   }
}
return result;
}

   
       
   


Claro, pero tenes que tener en cuenta la posición de los sprite Cara, Pelo, Cabeza, definir los bounds y luego copiar los pixeles, si no se copiaria mal-
 
Igual, yo en vez de definir las cosas tomaria un arreglo de textura, mas posición, mas escala, mas rotación.

Muchas gracias, esto creo que es lo que probaré. Cuando lo tenga hecho pasaré por aquí y lo comentaré.
 
Gracias a todos por la ayuda

Etiquetas: