Noticias

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

Cambio de sprites en las animaciones de personaje

Iniciado por Mcloud, Junio 05, 2018, 02:19:23 PM

Tema anterior - Siguiente tema
Buenas, 
 
Estoy creando un juego en 2D, con tintes de rol, en el pretendo que el jugador pueda escoger un poco el aspecto de su personaje, color de piel, pelo....y alguna cosa mas.
 
Tengo creado un personaje por defecto, sobre el tengo las animaciones de andar, atacar y alguna mas, tengo unos sprites múltiples de los cuales saco las imagenes y las añado al clip de animacion, por cada personaje(dependiendo color, pelo etc) tengo una hoja de sprites.
 
Mi duda es si puedo cambiar via script las imágenes de una aimacion, entiendo que de poder seria por cada clip, pero no veo como hacerlo....o si con lo que quiero hacer debo crear el personaje de otra manera que desconozco....
 
Muchas gracias


Cita de: pioj date=1528386181Bump de post repetido
   
   
   
       
   


Buenas, 
 
disculpa por repetir el post, estuve buscando bastante aqui y fuera y no encontre, podrias indicarme cual es por favor? o como debo buscarlo? 
 
 
 
Muchas gracias
 
 
 
 

Cita de: pioj date=1528386181Bump de post repetido
   
   
   
       
   


Buenas de nuevo, 
 
He revisado y revisado pero no localizo nada similar, el post que has comentado es otro que inclui yo mismo, pero en el unicamente queria acceder a las imagenes de un sprite multiple y ya lo consegui, y lo indique
 
Igual no lo explique bien, lo que quiero hacer es cambiar via script los sprites con los que he creado una animacion, es decir, para la animacion de andar a la derecha tengo 5 sprites, pues quiero sustituir esos 5 por otros 5 de donde yo le diga, igual que hago con la seleccion del personaje, pero cambiando los de la animacion, eso es posible? 
 
muchas gracias
 
 

hola, no entiendo muy bien lo que preguntas... "cambiar via script las imagenes de una animacion"?
 
a ver si te vale algo de esto: 
 

using UnityEngine.UI; //para manejar elementos UI
public Image playerImage; //el componente imagen del tu gameObject player
public Sprite[] sprites; //todos tus sprites
playerImage.sprite = sprites[numero]; //asignar un sprite a tu imagen

 
 

Cita de: Igor date=1528471518hola, no entiendo muy bien lo que preguntas... "cambiar via script las imagenes de una animacion"?
   
   
      a ver si te vale algo de esto: 
   
   

using UnityEngine.UI; //para manejar elementos UI
public Image playerImage; //el componente imagen del tu gameObject player
public Sprite[] sprites; //todos tus sprites
playerImage.sprite = sprites[numero]; //asignar un sprite a tu imagen

   
       
   


Gracias Igor, habia pensado eso pero entiendo que seria dejar de usar la animacion, intento ser mas concreto, te cuento desde el principio
 
 
 
He empezado hace unos meses y le dedico el poco tiempo libre que tengo despues del trabajo y la familia, el tema grafico nunca se me ha dado bien asi que mirando encontre "Liberated Pixel Cup" que me hizo mucha gracia y empece con eso, he hecho una intro y como comente en el otro post la seleccion del personaje, la tengo ya hecha, el cambio de la imagen lo hago como me comentas, me alegra saber que lo he hecho bien jeje
 

 
, mientras aprendía cree un mapa grande, un personaje con sus animaciones de andar y atacar y un enemigo que me atracaba, todo muy bien y muy divertido en el aprendizaje.
 

 
 
 
Los sprites de los personajes los saco de aqui: http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/
 
Es muy facil para negados como yo en el tema de imagen, y los puedes ir personalizando, en un principio cree un personaje sencillo,
 

 
, y las animaciones las hice con ese sprite
 

 
He bajado varios, con distintos cuerpos y pelos, en hombre y mujer, para la selección del personaje lo hago como indicas, y en la animacion que tengo, los he nombrado segun el sexo, cuerpo y pelo
 

 
Las animaciones las tengo todas hechas
 

 
La duda es si los sprites de las animaciones los puedo cambiar dependiendo del personaje que elija el jugador de alguna manera...si debo crear "n" animaciones(por favor nooooo) o debo crear el personaje de alguna otra manera para poder personalizarlo
 
 
 
Muchas gracias!!
 
 

Buenas, te voy a sugerir una solución un tanto complicada. Yo creo que debes recrear la web esa "http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/" pero en tu juego, ¿como? pues con los sprites que te deja el autor en github "https://github.com/jrconway3/Universal-LPC-spritesheet" te los descargas y creas un sistema de personalización, montando una imagen sobre otra tal y como hace el autor en la web. Al finalizar la personalización lo compilas todo en una sola imagen y la guardas en una carpeta que cree el propio juego llamada "Personajes" por ejempo. Es una solución un tanto complicada, pero te puede servir. 

Cita de: leocub58 date=1528490217Buenas, te voy a sugerir una solución un tanto complicada. Yo creo que debes recrear la web esa "http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/" pero en tu juego, ¿como? pues con los sprites que te deja el autor en github "https://github.com/jrconway3/Universal-LPC-spritesheet" te los descargas y creas un sistema de personalización, montando una imagen sobre otra tal y como hace el autor en la web. Al finalizar la personalización lo compilas todo en una sola imagen y la guardas en una carpeta que cree el propio juego llamada "Personajes" por ejempo. Es una solución un tanto complicada, pero te puede servir. 
   


Buenas, 
 
Muchas gracias, lo he pensado también, pero no me llega a quedar claro que eso me solucione el problema de las animaciones, porque si no he entendido mal seria generar un sprite yo mismo con la personalización, pero como meto eso en una animación ya creada? seria pasar de la animacion e ir cambiando las imagenes yo mismo?
 
 

Cita de: leocub58 date=1528490217Buenas, te voy a sugerir una solución un tanto complicada. Yo creo que debes recrear la web esa "http://gaurav.munjal.us/Universal-LPC-Spritesheet-Character-Generator/" pero en tu juego, ¿como? pues con los sprites que te deja el autor en github "https://github.com/jrconway3/Universal-LPC-spritesheet" te los descargas y creas un sistema de personalización, montando una imagen sobre otra tal y como hace el autor en la web. Al finalizar la personalización lo compilas todo en una sola imagen y la guardas en una carpeta que cree el propio juego llamada "Personajes" por ejempo. Es una solución un tanto complicada, pero te puede servir. 
   


Uh buenisimo eso!
 
Cita de: Mcloud date=1528201163Mi duda es si puedo cambiar via script las imágenes de una aimacion, entiendo que de poder seria por cada clip, pero no veo como hacerlo....o si con lo que quiero hacer debo crear el personaje de otra manera que desconozco....
   


Hola, entiendo que busques esto (sería muy cómodo hacer esto) pero según tengo entendido no creo que sea posbile, nunca lo intenté pero quien sabe.
 
Para mi una posible solución podría ser animar directamente via script, mucho más este tipo de animación con sprites, que se basa es pasar uno despues de otro sin nada complicado. No es tan descabellado, si tuvieras por ej animaciones de brazos, tendrías que tener una versión de cada tipo de brazo y una mínima lógica para la animación del brazo en general (ej: ponés sprite1_brazoAzul , esperas 0.2 seg , ponés sprite2_brazoAzul , esperas, 0.3s , sprite3_brazoAzul ... ponele).
 
Ya que decís que son multiples sprites, acá es donde todo se puede ir al tacho, si tenés todo junto (todas las partes del cuerpo en un solo sprite) quizás el tiempo que te toma separar todas las partes de interés es mucho, obviamente cada parte correspondería a un sprite separado, y desde tu script solamente elegir el set de sprites de la parte que te interesa (brazos azules, sombrero negro, camiseta roja, etc). Si los tuvieras por separado (estilo Rayman legends) la cosa sería mucho mas fácil.
 
Es definitiva, el script de animación estaría realizando una y otra vez la misma lógica (dependiendo del tipo de parte y del estado de la animación) pero los sprites los leerá de un lugar específico (por ej un contenedor(array por ej) previamente cargados, o un scriptable object). No es lo mismo que hacer un clip de animación (claro está), perdés esa etapa de diseño y toqueteo que te da todo lo pre procesado o lo "bakeado" si querés, pero como beneficio te da mucha versatilidad para cambiar las cosas "on the fly", ahora podés tener en teoría todas las combinaciones posibles con un solo script, pero tendrías que trabajar bien el script (que para este caso con sprites no es para nada complejo).
 
Saludos
 
 

Buenas, pues podrias hacerlo con los animations events.A ver si consigo explicarlo.
 
Te creas una clase scriptableObject que contenga un dictionary<string,Sprite> (ya no recerdo si era sprite)
 
la key se utilizara de id ("attack01_front","attack02_front","attack03_front","attack01_back".........)
 
y tendra asignado cada sprite correspondiente como value
 
Te puedes crear tantos scriptables como personajes tengas,respetando siempre los id y solo cambiando los sprites.
 
Tonces
 
Te creas una classe con una variable para assignar el scriptableobject,el dictionary, del personaje que quieras.
 
Y una funcion con un string de entrada que sera el id.Esta funcion buscara el id en el dictionary del scriptable assignado,el cual nos devolvera el sprite correspondiente a esa id.A partir de ahi que la funcion haga el cambio de sprite donde toque.
 
Luego al  crear las animaciones las haces creando animation events que llamen a esa funcion pasandole el id del sprite que toca.
 
Cheers!
 
 

yo la animacion en juegos 2d la hago manualmente... via script... controlando una variable "fotograma" que voy incrementando cada 0.25segundos... (porejemplo)
 
y entonces voy cambiando la imagen de mi personaje respecto a esa variable.... 
 
en realidad uso dos variables... una para el "step" de la animacion y otra para la animacion en si...
 
animacion 1 (andar) step 3 (tercera imagen de andar)...
 
 
 
 

Muchas gracias a los 3, lo que indica Hammer lo tengo medio listo, digo medio porque tengo que investigar que no he usado nunca los eventos, pero con eso y lo que indica Igor creo que me puede funcionar bien, la idea de lightbug me gusta pero creo que me va a llevar demasiado tiempo, y eso me escasea jeje
 
 
 
gracias de nuevo

Junio 10, 2018, 09:53:11 PM #12 Ultima modificación: Junio 12, 2018, 10:06:08 PM por pioj
Buenas de nuevo. 
 
Ando atascado, creo que algo hago mal....os cuento
 
me he decidido por crear eventos en las animaciones, tengo guardadas las posiciones de los sprites de cada animacion y en la llamada del evento le paso el indice que va cargando. Todo lo hace bien, depuro el codigo y coge las imágenes perfectamente, pero no consigo que se muestren, es decir, en SpriteRenderer no las coge, he hecho lo siguiente(resumido y con las ultimas opciones ya por desesperacion...)
 

private int[] walkLeft = {69,70,71,72,73,74,75,76,77 }; aqui tengo las posiciones de las imagenes dentro del Sprite multiple
public GameObject jugador;
private Sprite nuevaImagen;
public Image imagen;
public SpriteRenderer imageRen; este ha sido el ultimo intento
 private void EstableceImagen(int contador)
    {
Sprite[] imagenesPerso = Resources.LoadAll<Sprite>("Personajes/" + DatosJugador.ImagenCuerpo[0] + "/" + DatosJugador.ImagenCuerpo);
 nuevaImagen = imagenesPerso[walkLeft[contador]]; 
//esto ya es un popurri de todo lo que intento para que se vea la imagen
imagen.sprite = nuevaImagen;
imageRen.sprite = imagen.sprite;
jugador.GetComponent<SpriteRenderer>().sprite = nuevaImagen;
}

 
 
 
las publicas he asignado:
 

 
y en ejecucion la imagen si coge el valor, pero sprite renderer no
 

 
Ya no se que probar, no se porque no se me ve la imagen, he añadido el componente, pero ni poniendole una mimagen por defecto ni en ejecución muestra nada
 
 
 
Muchas gracias
 
 
 
 

Cita de: Mcloud date=1528660391Ya no se que probar, no se porque no se me ve la imagen, he añadido el componente, pero ni poniendole una mimagen por defecto ni en ejecución muestra nada
   


Por qué estás usando Image y Sprites juntos? Image y Sprites son dos componentes que funcionan en dos mundos distintos, uno está orientado a UI (Image) y el otro está orientado al 2D, se entiende al gameplay (Sprites), tu personaje será un sprite (ya que hay cosas de Image que no te interesan para el gameplay), debés reemplazar el campo "sprite" del componente "SpriteRenderer".
 
Tampoco está bien hacer el ResourceLoad all , eso hacelo una sola vez en awake, o start (simplemente para performance y para saber si todo se cargó o no en general)
 
Cita de: Mcloud date=1528660391y en ejecucion la imagen si coge el valor, pero sprite renderer no
   


y la consola no te tira ningun nullReference? es raro poque ambos toman un sprite, del código si es que está como lo pusiste debería funcionar ya que hacés por ahí un GetComponent(de ahí a que lo obtenga es otro tema).
 
 

Cita de: lightbug date=1528667551Por qué estás usando Image y Sprites juntos? Image y Sprites son dos componentes que funcionan en dos mundos distintos, uno está orientado a UI (Image) y el otro está orientado al 2D, se entiende al gameplay (Sprites), tu personaje será un sprite (ya que hay cosas de Image que no te interesan para el gameplay), debés reemplazar el campo "sprite" del componente "SpriteRenderer".
   
   
      Tampoco está bien hacer el ResourceLoad all , eso hacelo una sola vez en awake, o start (simplemente para performance y para saber si todo se cargó o no en general)
   
   
      y la consola no te tira ningun nullReference? es raro poque ambos toman un sprite, del código si es que está como lo pusiste debería funcionar ya que hacés por ahí un GetComponent(de ahí a que lo obtenga es otro tema).
   
   
       
   


Buenas, 
 
Usar Sprite e Image juntos ha sido una opcion al final, en principio solo tenia el SpriteRenderer, la animacion cambia perfectamente su Sprite, pero cuando en el clip cambio a que en vez de Sprites ejecute el evento no hay manera de que me lo cambie, los cargo bien(tienes razon en lo de la carga, lo cambiare) pero la consola no me lanza ninguna excepcion, no me dice nada....
 
A ultima hora meti un componente UI Image fuera de mi personaje, en el si me cambia sin problema la imagen, pero no entiendo porque no puedo en el SpriteRenderer del personaje que ya tenia....
 
Gracias

Etiquetas: