Поворот персонажа относительно джойстика в Godot
Я создаю игру с видом сверху в Godot, на телефон. Я скачал джойстик из ассетов, настроил его, и у меня получилось что теперь главный герой может ходить. Но вот есть проблема, он смотрит в одну сторону. И конечно я хочу сделать так, что бы он смотрел туда, куда джойстик указывает. Проблема не большая, и лёгкая в решении вроде бы, но я всё равно не особо понимаю как это можно реализовать. Код персонажа:
extends KinematicBody2D
var speed = 200
var velocity = Vector2()
var direction = Vector2.ZERO
func _physics_process(_delta: float) -> void:
move_and_slide(velocity * speed)
func _on_VirtualJoystick_analogic_chage(move):
velocity = move
Ответы (2 шт):
Не проверял, как работает на джостике, но думаю, суть одинакова для всех.
look_at(global_position + direction)
Godot 4
extends CharacterBody2D
const SPEED: float = 200.0
func _physics_process(delta: float) -> void:
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
look_at(global_position + direction)
velocity = direction * SPEED
move_and_slide()
Godot 3
# player.gd
extends KinematicBody2D
const SPEED: float = 250.0
# Направление игрока (куда он смотрит)
var direction: Vector2 = Vector2.ZERO
func _physics_process(delta: float) -> void:
# Высчитываем направление 'взгляда' игрока
look_at(global_position + direction)
move_and_slide(direction * SPEED)
# Сигнал от джостика (параметр `move`, то же самое, что и `direction`)
func _on_joystick_analogic_chage(move: Vector2) -> void:
# Переопределяем `direction`
direction = move
У меня получилось сделать поворот персонажа. Я опять изменил плагин на самый распространнёный "Virtual Joystick в Godot 3" от "MarcoFazio", и нашёл там тестовую сцену, в которой было всё это реализованно.
Код я написал в самом Анимационном Спрайте, и добавил ему значение в инспекторе для Joystick Left Path на Левый джойстик передвижения, и Joystick Right Path на правый - поворота. И в итоге у меня получился вот такой код Спрайте Анимационном:
extends AnimatedSprite
export (NodePath) var joystickLeftPath
onready var joystickLeft : VirtualJoystick = get_node(joystickLeftPath)
export var speed : float = 100
export (NodePath) var joystickRightPath
onready var joystickRight : VirtualJoystick = get_node(joystickRightPath)
func _process(delta: float) -> void:
var move := Vector2.ZERO
move.x = Input.get_axis("ui_left", "ui_right")
move.y = Input.get_axis("ui_up", "ui_down")
position += move * speed * delta
if joystickRight and joystickRight.is_pressed():
rotation = joystickRight.get_output().angle()