Noticias

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

Fijar personaje en una plataforma movil

Iniciado por Bousing, Diciembre 01, 2016, 07:27:21 AM

Tema anterior - Siguiente tema
Diciembre 01, 2016, 07:27:21 AM Ultima modificación: Diciembre 01, 2016, 07:28:24 AM por Bousing
Saludos compañeros
 
   En este ocasión, les escribo porque tengo una duda muy puntual. Ando haciendo un juego de plataformas en 2D y quiero hacer plataformas moviles que se muevan tanto izquierda, derecha, arriba o hacia abajo. Lo hice, y funciona bien. Lo que sucede es que cuando monto allí a mi personaje este no se mueve junto a la plataforma, sino que la plataforma se mueve independientemente y el personaje se cae. 
 
Intente lo siguiente
 
 
 


void OnCollisionEnter2D(Collision2D objeto){
 
  if(objeto.GameObject.tag == "NombreDeLaPlataforma"){
    this.transform.position = objeto.transform.postion;
  }
}

 
 
 
Eso me da la posición de la plataforma cuando el objeto la toca pero solo sucede una vez y la plataforma se mueve sin el personaje y posteriormente este se cae :D ... como hago para que ese código que les acabo de dar sea continuo hasta que salte o mueva el personaje ? Pense en un while con un booleano de condición de salida, pero eso más bien va a destrozar el programa. 
 
   Si saben como hacerlo de esa manera, o saben como solucionarlo de otra manera, estaría muy agradecido si comparten la respuesta. 
 
Un abrazo!!


Cita de: GSG3D date=1480579024Setea el parent del player con la plataforma.
   


como se hace eso ? 

Cita de: Bousing date=1480775246como se hace eso ? 
   


Google te suena? mira si pones parent+unity tenes toneladas de material para hacer lo que queres. Te paso solo la primera que salio (la mas poderosa y la que es capaz de dejar obsoletos al 98% de todos los foros de Unity del planeta)
 
https://docs.unity3d.com/ScriptReference/Transform-parent.html

Cita de: lightbug date=1480795603Google te suena? mira si pones parent+unity tenes toneladas de material para hacer lo que queres. Te paso solo la primera que salio (la mas poderosa y la que es capaz de dejar obsoletos al 98% de todos los foros de Unity del planeta)
   
   
      https://docs.unity3d.com/ScriptReference/Transform-parent.html
   


Muchas gracias. Realmente ignoraba que la clase transform tenía esa propiedad. Obviamente lo primero que hice fue escribir "parent" en google pero como no sabía bien lo que era lo deje así. Tengo que estudiarme todo el API. Saludos y gracias

Podrías hacerlo mediante una animación

Cita de: Mega date=1482442322Podrías hacerlo mediante una animación
   


Las animaciones son muy utiles siempre y cuando esten atadas a un punto de referencia, como por ejemplo el pivot de un personaje, pero para interactuar con otros objetos que no son estaticos no es para nada recomendable

Hace tiempo publiqué en mi blog cómo hacerlo, échale un ojo: https://histeriagamedev.wordpress.com/2014/12/23/unity3d-creacion-de-plataformas-moviles-en-juego-2d/
 
Básicamente se trata de lo que te ha dicho GSG3D: pon el transform de tu personaje como hijo del transform de la plataforma.
 
Espero que te sea de ayuda.
 
Saludos!

Mi blog dobre desarrollo en Unity: http://histeriagamedev.wordpress.com



Enero 12, 2017, 05:31:23 PM #8 Ultima modificación: Enero 12, 2017, 05:31:48 PM por edgar_94_
Hooola buenas, aunque lo que dicen los compañeros es cierto, no me gusta tener que estar cambiando los parents y tal... no es muy recomendable por muchas razones xD
 
Aqui tienes una sencilla solución, he usado objetos 3D, pero funciona igual con 2D (con sus respectivos componentes 2D)
 
https://gyazo.com/cf28f9ce3661e9ba20dd8184a5afc4e4
 
https://gyazo.com/5ce6c8d265d10d6eb9056e780135e55c  (Estos son los componentes que he añadido el objeto de encima de la plataforma)
 
https://gyazo.com/f9ccef9673c6ae9554ae6f621883fac4 (y estos los de la plataforma)
 
y este es el codigo de movimiento, no es el mejor, ni el más optimo pero es para testear xD
 

   public float speed = 10;
void FixedUpdate () {
       
            transform.Translate(new Vector3(0, speed, 0) * Time.deltaTime);
       
    }

 
Puedes tener problemas si la plataforma se mueve muy muy rapido, ya que intervienen más factores al ser fisicas... Pero bueno, eso sería otro tema.. 
 
Si es en 2D, el rigidbody deberia ser rigidbody 2D y el box collider, box collider 2D 
 
Hale, ya he dado la chapa por hoy xD

No diria que el parent no es recomendable "por muchas razones", me parece que solo por el tema de la escala, en lo que va a scripts no deberia haber ningun problema. Aparte cambiar parents es tan simple como usar una sola instruccion y algun condicional. Yo tengo todas mis plataformas dentro de un gameObject padre (escala 1,1,1) el cual tiene nodos de movimiento, la plataforma en si y otras cosas mas, entonces cuando enparento con este no hay modificacion de escala, eso es porque decidi previamente que seria asi y me ha funcionado excelentemente.
 
Uno de los tipicos problemas que surgen en un 2D usando un charactercontroller(transforms, no rigidbodies) es que cuando la plataforma sube o baja, dependiendo del orden de actualizacion de la posicion player / plataforma puede verse como que existen saltitos, aunque se corrige facil. Igual no es recomendable usar rigidbodies en characters 2D, perdes mucho control, va dando saltitos al caminar (aunque no parezca lo hace si usas algo de gravedad) y para colmo se trava con un simple escalon.

Cita de: lightbug date=1484251311 
   


@lightbug ya bueno, pero deberías adaptar el código a transform locales, ya que las posiciones también cambian... Y tendrías que tener en cuenta todas las cosas que "hereda" del parent... Las rotaciones son nefastas y tal... El tema del rigidbody en 2D... Lo probaré y lo de los escalones se podría solucionar fácil xD

Cita de: edgar_94_ date=1484253416@lightbug ya bueno, pero deberías adaptar el código a transform locales, ya que las posiciones también cambian... Y tendrías que tener en cuenta todas las cosas que "hereda" del parent... Las rotaciones son nefastas y tal... El tema del rigidbody en 2D... Lo probaré y lo de los escalones se podría solucionar fácil xD
   


Yo tengo dos scipts, uno que uso como vos decis deltas de movimiento, y anda bastante bien (la considero una fuente mas de desplazamiento como lo puede ser gravedad, movimientos horizontales, etc) y el otro usando parents. Los resultados son practicamente identicos, aunque para el metodo de las deltas hay que solucionar el tema de los saltitos (chequear si la plataforma baja o sube), no sucede con un rigidbody claro.
 
A que te referis con lo de las rotaciones?
 
Con respecto al rigidbody siempre pense que me faltaba algun truco para que el movimiento sea fluido, despues de leer varias entrevistas y articulos me di cuenta que casi todos los estudios y/o desarrolladores creaban su propio controller por esta razon de los problemitas basicos que tenian al mover al player, escalones, rampas, plataformas, etc. Al final me hice uno parecido al que trae unity por default pero para 2D con steps, rampas, isGround y todo eso,

Etiquetas: