Смотрите предыдущую статью про передвижение танка.
1.Создаем новую сцену RigidBody2D "bullet". Добавляем скрипт , спрайт и CollisionShape2D.
2. Добавляем спрайт ствола. При помощи команды $'название спрайта'.look_at(get_global_mouse_position()) заставляем его смотреть в сторону мыши.
3. Пишем скрипт выстрела. В скрипте игрока добавляем переменную bullet с помощью var bullet=preload(перетаскиваете сцену пули сюда ) . Добавляем новую функцию shoot командой func shoot(): . Создаем новую переменную b командой var b=bullet.instantiate() ,передаем позицию и поворот от ствола командой b.transform=$'название спрайта'.global_transform. Командой get_tree().get_root().add_child(b) добавляем дочерний объект пулю к основной сцене, чтобы она не зависела от положения самого танка. Проверяем на нажатие кнопки выстрела командой
if Input.is_action_just_pressed('shoot'):
shoot()
shoot() вызывает нашу функцию выстрела
Весь код на данный момент выглядит так.
extends RigidBody2D
@onready var vel=Vector2(20000,0)
@onready var not_vel=Vector2(-20000,0)
var bullet=preload(перетаскиваете сцену пули сюда)
func _process(delta):
if Input.is_action_pressed('a'):
apply_impulse(not_vel.rotated(rotation))
if Input.is_action_pressed('d') :
apply_impulse(vel.rotated(rotation))
if Input.is_action_just_pressed('shoot'):
shoot()
$'название спрайта ствола'.look_at(get_global_mouse_position())
func shoot():
var b=bullet.instantiate()
b.transform=$'название спрайта ствола'.global_transform
get_tree().get_root().add_child(b)