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

Власні вузли можна створити в 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