Найти в Дзене

Добавляем экземпляры на сцену через код в Godot 4

В Этой статье мы сделаем функцию, которая будет добавлять на сцену в рандомных местах объекты и делать она это будет каждые 5 секунд.

1.Код добавления объекта на сцену

#Загружаем наш объект

var enemy = load("res://Scene/Enemy.tscn")

func _ready():

#Создаем объект

var e = enemy.instantiate()

#Даём ему координаты

e.position = Vector2(100,0)

#Добавляем на сцену

add_child(e)

Скрипт готов!

2.Теперь добавим таймер для нашего скрипта.

Добавим дочерний узел Timer

-2

У нас во вкладке "Узел" -> "Сигналы", появится вкладка Timer

-3

Кликаем два раза и в появившемся окне выбираем элемент к которому хотим присоединить узел, в моем случае это Node2D, то есть сама сцена.

-4

У нас в коде появится новая функция "_on_timer_timeout" и теперь изменим код следующим образом, перенесем все из функции _ready в новую функцию:

var enemy = load("res://Scene/Enemy.tscn")

var timer = Timer.new()

func _on_timer_timeout():

var e = enemy.instantiate()

e.position = Vector2(100,0)

add_child(e)

Что бы настроить работу таймера нужно выбрать его в дереве сцены и изменить в инспекторе, мы поставим во вкладке Wait Time 5 секунд (Время срабатывания) и поставим галочку в Autostart, что бы он запускался сам при запуски сцены.

-5

3. Теперь сделаем рандомные координаты

Изменим наш код так:

var enemy = load("res://Scene/Enemy.tscn")

var rng = RandomNumberGenerator.new()

func _ready():

rng.randomize()

func _on_timer_timeout():

var e = enemy.instantiate()

#Генерируем координаты в диапазоне от 100 до 400

e.position = Vector2(rng.randf_range(100,400),0)

add_child(e)