Власні вузли VisualScript

Попередження

«З Godot 4.0 буде повністю видалене ядро VisualScript. <https://godotengine.org/article/godot-4-will-discontinue-visual-scripting>`__ Тому не рекомендується створювати нові проекти за допомогою візуальних скриптів у Godot. У майбутніх випусках Godot 4.x VisualScript може бути повторно реалізований як розширення.

Хоча Godot 3.x підтримуватиме VisualScript, ми рекомендуємо спробувати GDScript, особливо якщо ви маєте намір перенести свій проект на Godot 4.

Власні вузли можна створити в GDScript, а потім використовувати у VisualScript. Це корисно для завантаження складного коду в GDScript і повторного його використання.

Створення власного вузла

Створіть новий скрипт, який розширює VisualScriptCustomNode і помістіть зверху ключове слово tool. Це потрібно для запуску скрипта в редакторі.

Є кілька функцій, які можна реалізувати для встановлення параметрів власного вузла. Додайте лише ті функції, які потрібні; наприклад функція _has_input_sequence_port, якщо вона має повертати false.

Найважливішою частиною вузла є функція _step. Там визначена логіка вузла.

Параметр inputs містить значення вхідних портів.

Параметр outputs є масивом , в якому індекси являють собою ідентифікатори вихідного порту. Його можна змінити, щоб встановити значення вихідних портів.

start_mode може перевірити, чи не вперше _step викликаний.

working_mem постійний при кожному виклику _step. З його допомогою можна зберігати інформацію.

Якщо ви хочете видалити помилку, наприклад, якщо типи введення неправильні, ви можете повернути повідомлення про помилку в вигляді текста. Коли все піде правильно, поверніть ідентифікатор порту послідовності, який слід викликати наступним. Якщо ваш вузол не має жодного, просто поверніть 0.

Приклад:

tool
extends VisualScriptCustomNode

# The name of the custom node as it appears in the search.
func _get_caption():
    return "Get Input Direction 2D"

func _get_category():
    return "Input"

# The text displayed after the input port / sequence arrow.
func _get_text():
    return ""

func _get_input_value_port_count():
    return 0

# The types of the inputs per index starting from 0.
func _get_input_value_port_type(idx):
    return TYPE_OBJECT

func _get_output_value_port_count():
    return 1

# The types of outputs per index starting from 0.
func _get_output_value_port_type(idx):
    return TYPE_VECTOR2

# The text displayed before each output node per index.
func _get_output_value_port_name(idx):
    return "Direction"

func _has_input_sequence_port():
    return true

# The number of output sequence ports to use
# (has to be at least one if you have an input sequence port).
func _get_output_sequence_port_count():
    return 1

func _step(inputs, outputs, start_mode, working_mem):
    # start_mode can be checked to see if it is the first time _step is called.
    # This is useful if you only want to do an operation once.

    # working_memory is persistent between _step calls.

    # The inputs array contains the value of the input ports.

    var x = int(Input.is_action_pressed("ui_right")) - int(Input.is_action_pressed("ui_left"))
    var y = int(Input.is_action_pressed("ui_down")) - int(Input.is_action_pressed("ui_up"))

    # The outputs array is used to set the data of the output ports.

    outputs[0] = Vector2(x, y)

    # Return the error string if an error occurred, else the id of the next sequence port.
    return 0

Використання власного вузла

Щоб скористатися скриптом, додайте CustomNode, виберіть його та перетягніть власний скрипт вузла у властивість script показану в інспекторі.

../../../_images/visual_script_custom_node_set_script.png

Результат:

../../../_images/visual_script_custom_node_result.png