[Unity][Novato total] Hacer que mi personaje de la vuelta al chocar

Ancoreig

Buenas a todos, ésta será la enésima vez que retomo Unity en los últimos años y espero que sea la definitiva. He empezado con tutos sencillitos y ayer terminé concretamente este de plataformas 2d:

Una vez terminado el vídeo, he seguido y voy a seguir cacharreando Unity a través de ese proyecto.

A lo que vengo a preguntaros: mi intención es que el personaje se mueva automáticamente y que únicamente cambie de dirección cuando golpea con otro objeto... he visto varias formas de hacerlo, pero no logro hacer que funcionen.

En el proyecto del vídeo, el suelo, muros etc... todo es un único TileMap. He visto en algunos sitios que se le suele poner un tag, por ejemplo "muro" a esos objetos, y luego en X métodos (por ejemplo, OnCollisionEnter2D) se le pregunte si ha chocado con el objeto que tiene ese tag. Si ha chocado, que se le hagan las modificaciones necesarias al personaje de velocidad, dirección... Mi problema viene aquí; como es un único tilemap, cómo puedo saber en qué plano ha chocado? Solo quiero que cambie de dirección cuando choca a izquierda o derecha (los muros, plano X), no cuando salte y aterrice por ejemplo (plano Y)

Quitando el tema del tag, también he visto que se suele utilizar para averiguar si ha chocado por izquierda o derecha (en el método OnCollisionEnter2D), la resta de ambas posiciones de los objetos que chocan, y una vez se tenga la dirección de esa resta, hacer las modificaciones apropiadas de escala y velocidad.

Igual es un poco confuso el texto... gracias de antemano!

B

Puedes crear objetos vacíos que tengan el detector y sean los que hagan girar el personaje si este entra en contacto.
El tema es que si quieres que se mueva automáticamente, que pasa si se choca con un objeto y gira en dirección opuesta? Se volverá sobre sus pasos y si no encuentra otro objeto se mantendrá en esta.
Puede ocurrir que cambie completamente como está la cámara, la generación de enemigos o escenario

1
B

No estoy muy seguro, pero un raycast que salga del arma apuntando hacia la dirección a la que mira el personaje y cuando toque se gire? O un collider en forma de caja pequeña que haga el mismo efecto?

Ahora mismo no recuerdo cuál opción es mejor.

1
kesada7

Yo publiqué el año pasado un juego que es tal cual describes y como todo hay muchas formas de hacerlo. Yo lo que hice es tener unos triggers en los pies para saber cuando estoy tocando el suelo, el del video lo hace con raycast, y tengo otro trigger en la parte foward del personaje. Luego simplemente muevo el personaje siempre hacia adelante y hago que cuando triggue con la pared (+ algunas condiciones como por ejemplo que también esté en el suelo así puedes hacer slide en la misma dirección por la pared como se ve al final del gif, esto ya depende de lo que quieras hacer tú) cambio la dirección del personaje y lo sigo moviendo foward. Es bastante sencillo aunque como digo hay muchas formas de poder hacer esto.

1 1 respuesta
Ancoreig

Muchas gracias a todos!, creo que voy a indagar sobre el tema de raycast, me parece la más sencillita para empezar.
#4 mi idea es hacer un juego con ese formato, me he descargado tu juego y está muy muy bien, enhorabuena

Edito: he conseguido hacerlo con raycast y como comentas kesada, en una parte del vídeo ya lo hizo el del tutorial para ver si el personaje estaba en el aire o no, pero se me había olvidado esa parte

neZbo

Sólo comentarte que puedes tener dentro de un grid todos los tilemaps que quieras y que cada uno esté en su layer, un tilemap para el suelo por ejemplo con layer "Ground" y otro tilemap con layer "Obstacles" y luego en el OnTriggerEnter2D o OnCollisionEnter2D según tu collider sea trigger o no, controlas que la colisión se de para la layer que quieras:

int ObstaclesLayer = LayerMask.NameToLayer("Obstacles");
if (collision.gameObject.layer == ObstaclesLayer) { Aquí el queco se daría la vuelta }

Casi siempre hay distintas formas de hacer las cosas xD

1
Akiramaster

¿No serviría simplemente con preguntar si la dirección es X cambiarla a Y? Haciendo un trigger de 2 estados.

Parece que es OnTriggerEnter en collide.

Usuarios habituales

Tags