Noticias

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

Personaje no se mueve con plataforma

Iniciado por TOPO, Diciembre 09, 2016, 10:42:01 AM

Tema anterior - Siguiente tema
Buenos dias a todos,
 
 
 
Estoy realizando un juego de plataformas y tengo un problema... cuando el personaje se sube a una plataforma y esta tiene un movimiento, ya sea lateral o vertical no se mueve con ella, cuando es latera se cae de la plataforma y si es vertical va dando botes.
 
No se si puedo hacer añadiendo la velocidad de la plataforma a la del personaje o se puede usar alguna característica de Unity. ¿Podéis echarme una mano?
 
 
 
Gracias!!

Hola TOPO, mira este tema esta mas tratado en internet que la cara de la duquesa de Alba jajaj, es mas hace poco hubo un topic casi identico, en definitiva tenes que enparentar al jugador/personaje en la plataforma, y cuando se va de ella desenparentarlo. Formas para hacer esto hay varias y depende de tu juego, lo que te pasaba a vos me pasaba a mi con el charactercontroller, sobre todo por eso de los saltitos.
 
Podes usar en la plataforma OnCollisionEnter y verificar que el player sea el que ingresa. Si haces asi tene en cuenta que para OnCollisionEnter necesitas un rigidbody en algunos de los dos (player o plataforma) que sea Kinematico, pero si no queres que las fisicas hagan de las suyas el truco es freezar posiciones y rotaciones.
 
Saludos

Muchas gracias y perdón por el tema si ya estaba tratado en el foro.  Como tu me comentas ya lo intente, pero entoces el personaje no se puede mover dentro de la propia plataforma. 

Diciembre 09, 2016, 09:40:53 PM #3 Ultima modificación: Diciembre 09, 2016, 09:43:28 PM por lightbug
Tiene sus trucos la cosa, Algo que me olvide de decirte (que era lo mas obvio y facil de hacer) es que tu personaje detecte lo que tiene en el suelo y lo identifique. Con cualquier metodo de deteccion como un RayCast o CircleCast (te recomiendo este).
 
Lo unico que tenes que hacer es chequear si está en el suelo y si el suelo es una plataforma lo enparentas. El problema logico esta en la distancia del cast que haces, debe ser lo suficientemente corta para que cuando apenas despegue los pies de la plataforma esté "fuera" de ella.
 

//Algo asi...
Transform Suelo()
{
RayCastHit2D rhit;
rhit = Physics2D.CircleCast(....)
if(!rhit.collider)
   return null;
//toco algo
return rhit.collider.transform;
}
void Update()
{
//.....
Transform suelo = Suelo;
if(suelo == null){
   transform.SetParent(null);   //no recuerdo si esto funciona sino--->  transform.parent = null;
   return;
}
if(suelo.tag == "plataforma")
   transform.SetParent(suelo);
else
   transform.SetParent(null);
}

 
Si estas usando un rigidbody tenes que usar un metodo asi para cualquier tipo de deteccion de suelo, yo por esta razon me hice mi charactercotroller2D, que tengo control de en que momento exacto el player esta en el suelo (o de lo que sea) y todo movimiento se lo impongo yo. Te super recomiendo este ultimo metodo creeme es un antes y un despues sobre todo si haces platformers.
 
Saludos

Etiquetas: