Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: JotaErre en Julio 13, 2017, 12:38:08 PM

Título: FPSController se desliza en plataforma movil
Publicado por: JotaErre en Julio 13, 2017, 12:38:08 PM
Hola a todos!!
 
Un problemilla tengo con el uso de CharacterController en superficies influenciadas por fuerzas aplicadas a un rigidbody. Obserbando como actua un Rigidbody con isKinematic activado, he emparentado el FpsController a la superficie mobil. Esto funciona bien con las rotaciones. Pero al moverse la plataforma horizontalmente el FpsController queda inmovil creando un efecto de deslizamiento.
 
¿Alguna idea?
Título: FPSController se desliza en plataforma movil
Publicado por: kaito en Julio 13, 2017, 06:37:58 PM
En plataformas móviles, se suele emparentar el actor al transform de la plataforma. No se utiliza físicas.
Título: FPSController se desliza en plataforma movil
Publicado por: lightbug en Julio 13, 2017, 11:17:25 PM
O podes enparentar(tene cuidado con las escalas porque se transmiten de padres a hijos) o podes detectar que la plataforma es movil, yo generalmente detecto si el suelo es static = false y o si esta en layer "plataforma", tomar el delta de posicion y aplicarlo siempre a tu charactercontroller, simplemente es un "fuerza" mas que influencia tu movimiento, por ej: gravedad + WS + AD + plataforma
Título: FPSController se desliza en plataforma movil
Publicado por: JotaErre en Julio 14, 2017, 06:32:24 PM
Prueba superada!!
 
Sin el Character Controller los Rigidbody con isKinematic se comportan como deben emparentados con un objeto. En el caso de añadir CharacterController este se moverá mediante el la función "ChraracterController.move( Vector3 );" . En el caso del script incluido en "Standard Assets"  será "m_CollisionFlags = m_CharacterController.Move(m_MoveDir * Time.fixedDeltaTime);" Para que se mueva junto al objeto sin moverse he sumado la velocidad del objeto emparentado "m_CollisionFlags = m_CharacterController.Move((m_MoveDir + transform.parent.GetComponent<Rigidbody>().velocity) * Time.fixedDeltaTime);"
 
Muchas gracias por las respuestas!