Godot 2D #6: Mirar hacia el ratón

¡Muy buenas a todos!
Hoy vamos a hacer que nuestro personaje mire hacia el ratón.
Esta entrada corresponde a la parte escrita del vídeo que he hecho en YouTube. Si quieres ver este mismo tutorial de una forma más visual, no dudes en echarle un vistazo. Además, este vídeo incluye mucha más información y explicaciones gráficas que te ayudarán a comprender mejor qué es lo que estamos haciendo. Así que no lo dudes, ¡échale un ojo!
Vídeo de este tutorial:
https://www.youtube.com/watch?v=CNOAQUdPd_o
Dicho esto, ¡Vamos al lío!
Antes de nada, vamos a implementar en nuestro proyecto unos assets de un tanque para poder ver este ejercicio de una forma más visual. Puedes descargarlos aquí. Antes de empezar a poner el código, tenemos que colocar una serie de cosas en nuestro entorno.
Vamos a colocar un "Node2D" y lo vamos a renombrar como "Pivot". La posición de este "Pivot" será aquella desde donde rote nuestro objeto, en este caso la torreta del tanque, pero en el tuyo puede ser un arma o lo que quieras. Como nodo hijo de este "Pivot" , vamos a poner un nodo "Sprite" y este será lo que rotará.

Si nos imaginamos un eje de coordenadas que empiece justo en nuestro personaje, si queremos hacer que gire, deberá estar mirando hacia la derecha, es decir, sobre el eje X formando 0º.
Si en tu caso al importar tu imagen ya le ocurre esto, no hace falta que gires nada.

Una vez que tengamos todo esto listo, es hora de empezar a programar.
Vamos a crear una función que se llame "Look_at_mouse" y la vamos a llamar dentro de nuestra función de "_physic_process(delta)".
extends KinematicBody2D var motion = Vector2() func _physics_process(delta): look_at_mouse() motion=move_and_slide(motion) func look_at_mouse():

Una vez que lo tengamos, únicamente deberemos hacer dos cosas, ya que todo el calculo matemático que tendríamos que hacer lo hace Godot por defecto (si quieres saber cual es mírate el vídeo). Primero, debemos capturar la posición del mouse de forma global, y segundo, decirle que mire hacia esa dirección.
Para esto, primero vamos a crear una variable llamada "mouse_pos" y la vamos a igualar a una función llamada "get_global_mouse_position()". De esta forma estaremos almacenando constantemente la posición global del ratón en la pantalla. Luego, cogeremos el nodo "Pivot" mediante "get_node(...)" y le diremos que mire hacia "mouse_pos" con la función "look_at(...)".
extends KinematicBody2D var motion = Vector2() func _physics_process(delta): look_at_mouse() motion=move_and_slide(motion) func look_at_mouse(): var mouse_pos = get_global_mouse_position() get_node("Pivot").look_at(mouse_pos)

¡Y listo! Al ejecutar el juego, ya tendremos una torreta que gire en función de la posición del mouse en la pantalla.


Si tienes cualquier tipo de duda no dudes en ponerme un comentario aquí debajo o en el propio vídeo, e intentaré contestarte lo más rápido posible.
¡Nos vemos!
El vídeo de este tutorial:
https://www.youtube.com/watch?v=CNOAQUdPd_o
Mi canal de YouTube:
https://www.youtube.com/channel/UCAwrHOXBtRvfw034z7BjIhw