Físicas arcade para moto en Unity

Nucklear

Buenas, llevo un par de días dandole vueltas y buscando información por ahí pero ne encuentro nada y lo que voy probando no me convence.

Lo que busco es montar unas físicas al estilo Crazy Taxi pero para una moto. Los puntos principales son:

  • El vehículo tiene pocas inercias
  • No hay derrapes (salvo forzados por el jugador) y el ángulo de giro es limitado
  • Los derrapes forzados tienen un ángulo de giro <90º
  • La gravedad es grande y el coche vuelve rápidamente al suelo
  • El vehículo nunca puede volcar en los ejes X o Z

A grandes rasgos esas serían las características.

Lo que he probado hasta ahora:

  • Utilizar las físicas integradas de Unity: El resultado es demasiada libertad al vehículo y un movimiento demasiado natural para lo que busco sumando el tema de las inercias que no necesito en el modo que estan hechas.
  • Utilizar un solo box collider para toda la moto animando las ruedas con un script y bloqueando los ejes para que no giren libremente: Da un efecto demasiado antinatural (Mas antinatural de lo que necesito)
  • Tambien he probado con wheelcolliders pero mientras para un coche van bien para la moto al menos a mi no me dan el resultado que busco.

Otras cosas que tengo en mente:

  • Hacer las físicas para un coche y emparentar la moto con sus animaciones para que parezca que es lo que el jugador conduce: Simplemente no me convence.

Aqui os dejo unos cuantos videos de las físicas que busco:

Se que es una pregunta un poco genérica pero es que no encuentro nada de información al respecto y espero que entre todos podamos sacar alguna conclusión que al menos me marque un camino a seguir porque estoy bastante perdido. Es la segunda vez que me enfrento a este problema y no quiero desistir como la primera vez.

Gracias :3

13500

es esto lo que buscas?

http://randomationmedia.com/rvpweb.html

https://www.assetstore.unity3d.com/en/#!/content/12013

Montar unas físicas para un vehículo no es moco de pavo, si encima el vehículo tiene ciertas "peculiaridades" como las tiene una moto, peor aún.

1 respuesta
Nucklear

#2 No exactamente, ya había probado esa demo, pero la moto por ejemplo tiene demasiada libertad, no se si has jugado a alguno de los clásicos arcade (supongo que si, si no no has tenido infancia :3) y si te fijas el coche a penas tiene libertad y va como "sobre railes" en la carretera.

1 respuesta
Aidanciyo

Suerte, por que va a ser complicado.

Es como yo cuando quise hacer caballos y me di cuenta de que hacer un caballo es una movida tremenda XD

Kaiserlau

#3 No te valen con las de Unity, se pueden configurar los valores de esa funcion libremente? Preguntas de muy noob..

Si es si, no te vale con hacer una clase "entidad" q reuna los boxes q quieras y luego q esta use una funcion q les pase a la "animacion de esa clase" las "fisicas" configuradas en una funcion "movimiento"?
:ninjaedit:
clase padre con la x,y,z q se aztualice funciond e movimiento(las con las fisicas q quieras) y clases hijas (coche,moto) donde reunas los boxes con la animacion q quieras?

1 respuesta
Nucklear

#5 Esa es otra posibilidad que estoy barajando, utilizar una única entidad que guíe el movimiento e implementar unas físicas muy básicas al conjunto general. Luego emparentar la moto con sus animaciones que simulen la conducción al bloque principal. Creo que es la solución mas sencilla.

r2d2rigo

#1 nunca uses wheelcolliders, estan programador por el mismisimo satan.

1 1 respuesta
Nucklear

#7 Lo he comprobado, descartada esa idea, demasiadas cosas a controlar para lo que busco.

Si mirais los vídeos que he pusto veréis que las físicas son muy básicas y es como si los vehículos tuviesen un wrapper que los mueve y el resto son simples animaciones.

1 respuesta
B

#8 Puedes usar las propias propiedades de un rigidbody, le controlas la velocidad para que sea permanente y le dé ese toque arcade que quieres (acelerones instantáneos) y luego puedes hacer que el girar simplemente cambie la rotación a tope hacia donde quieras, por lo general lo arcade es muy rápido, por lo tanto creo que esto te irá perfe.

Nucklear

Ya he conseguido encaminar esto, el unico problema es que el movimiento que me gusta lo consigo con Translate y este suda de los colliders.

He probado con rigidbody AddRelativeForce y MovePosition y los resultados no me gustan:

Con AddRelativeForce la fuerza al girar parece que se descompone y el vehiculo va como derrapando de lado.

Con MovePosition va a saltos como si fuese rozando por el suelo.

OT: ¿Alguno sabe el nombre del programa ese para grabar GIFs? Así pongo una preview de como va

1 respuesta
13500

#10 GIFcam http://blog.bahraniapps.com/gifcam/

Es esto lo que te pasa? http://naffupdate.com/forumfiles/Rb_Issue.html

1 respuesta
Nucklear

#11 Si uso AddRelativeForce si, se mueve algo similar a eso, aunque los giros los puedo controlar mucho mejor.

Así está el control ahora mismo usando Translate:


He implementado yo el tema de las inercias. La idea es que ese cubo haga de wrapper para el modelo final con sus animaciones.

Aqui dejo un ejemplo de como se mueve con AddForce:

13500

Si con AddRelativeForce no quieres que te derrape nada, prueba a aumentar la fricción de los materiales, y que la aceleración hasta el maximo de relativeForce que tengas establecido, sea cuasi-instantánea

1 respuesta
Nucklear

#13 Al final lo que he hecho ha sido proyectar la velocidad del rigidbody sobre la dirección que lleva el cubo, así la velocidad va variando en la misma escala que el giro y se elimina ese efecto de derrapada.

Edit: Ya he corregido todo lo que me complicaba la vida, a ver si hoy dejo finiquitado el tema de saltos y rebotes en los colliders.

Gracias por la ayuda

Nucklear

Bump por si alguien quiere probarlo subí un prototipo a Dropbox:

[Link_Actualizado_en_ #18 ]

Aviso que está muy verde

1 respuesta
13500

#15 Un par de cosas:

  • si voy marcha atrás, hay un momento en el que se para.
  • mientras voy marcha atrás, las flechas de dirección izq/der no deberían estar invertidas?
  • no sé si es por culpa del pc este de mierda que tengo en el curro, pero me da la sensación de que la velocidad no es constante, sino que me va pegando acelerones y bajones constantes
1 respuesta
Nucklear

#16 La marcha atras está así provisional para frenar antes de caer pero no es definitivo, lo de que se frene al ir pulsando hacia atrás es porque voy decrementando la fuerza pero es un resto de código de unas pruebas y si que para atras tengo que invertirlo.

Lo de los acelerones no lo noto yo en local, pero lo que si me queda es limitar la velocidad máxima.

Nucklear

He hecho algunos cambios en los controles la adaptación al suelo y el vuelo, tambien he añadido un efecto rebote en las colisiones frontales (Estoy teniendo problemas con las colisiones en ángulo contra las paredes.

Se agadecería un poco de feedback:

https://dl.dropboxusercontent.com/u/27382237/Unity/Export.html

También he colocado un placeholder donde irá el modelo final con sus animaciones.

13500

El efecto rebote de la parte frontal tiene alguna finalidad con respecto al diseño del juego? porque si no, es un verdadero coñazo.

De todos modos para colisiones a unity no se le da nada mal con los rigidbody, yo en tu caso asignaría al collider de la moto el modo Collision Detection en Continuous, y si quieres que la rebote como si fuera de goma (mas o menos como en carmaggedon), utilizar Bouncing material (https://unity3d.com/es/learn/tutorials/modules/beginner/physics/assignments/bouncing-ball)

Cuando la moto esta en el aire, queda un poco raruno que se estabilice recta y paralela al suelo.

1 respuesta
Nucklear

#19 No el rebote frontal es justamente que tiene un Physic Material asignado que hace el rebote, lo puse temporalmente para ver como quedaba, lo que me mosquea es como se queda clavado cuando choco en diagonal, y para eso aun no encontré una buena solución.

En el aire se estabiliza paralela al suelo porque sigue la posición del wrapper que es el cubo que esta en los gifs, por ahora la moto esa solo es un placeholder, mas tarde con las animaciones le añadiré mas dinamismo al salto.

Usuarios habituales