Как передать переменную из одного скрипта в другой Godot 4?

Рейтинг: 1Ответов: 1Опубликовано: 09.07.2023

У меня есть скрипт сцены "main_menu.gd", я передаю его в скрипт сцены "levels.gd".

Скрипт main_menu.gd:

@export var music_menu_pos = 0.0

Скрипт levels.gd:

@onready var music_pos = get_node("res://scripts/main_menu.gd").music_menu_pos

Проблема: Выводит ошибку при нажатии на кнопку перехода в сцену levels.gd из main_menu.gd:

Invalid get index 'music_menu_pos' (on base: 'null instance')

Я не понимаю почему переменная пустая, если в функции сцены "main_menu.gd" при нажатии на кнопку перехода в сцену "levels.gd" я проверил переменную music_menu_pos и она выдает не пустое значение, а позицию саундтрека. Помогите пожалуйста!

Ответы

▲ 1

Ваша проблема не в том что переменная music_menu_pos пустая, а в том что вы пытаетесь её получить у пустого объекта.

Это можно решить с помощью <ОБЪЕКТ>.get("<ИМЯ ПОЛЯ>"):

...

var n = $<АБСОЛЮТНЫЙ ПУТЬ К ОБЪЕКТУ>
    
n.get("music_menu_pos")  # Или другое имя, какое вам надо

...

UPD: Так лучше:

...

@export var node: <ТИП ВАШЕГО ОБЪЕКТА>

node.music_menu_pos

...

И в инспекторе привязываете к node нужный вам объект.

Очень надеюсь что поможет (сам только изучаю Godot).

PS

Ваша проблема в том, что вы пытаетесь загрузить скрипт как узел (node): get_node("res://scripts/main_menu.gd"), а так работать не будет.