커스텀 비주얼스크립트 노드

커스텀 노드들은 GDScript로 작성되었기 때문에 비주얼스크립트에서도 사용이 가능합니다. 이 점은 복잡한 코드를 GDScript로 offloading하고 재활용하는데 유용합니다.

커스텀 노드 생성하기

class_VisualScriptCustomNode`를 상속하는 새로운 스크립트를 만들고 상단에 ``tool` 키워드를 넣습니다. 에디터에서 스크립트를 실행하기 위해서 필요한 작업입니다.

커스텀 노드의 매개변수들을 설정하기 위해 구현할 수 있는 함수들이 몇 가지 존재합니다. 필요한 함수만을 구현하십시오. 예를 들어, false 를 반환해야 한다면 _has_input_sequence_port 함수의 구현은 불필요합니다.

커스텀 노드의 가장 핵심적인 부분은 바로 _step 함수로, 노드의 로직이 정의되는 부분입니다.

inputs 매개변수는 입력 포트의 값을 저장합니다.

outputs 매개변수는 인덱스가 출력 포트 id를 뜻하는 배열입니다. 값을 수정해 해당 출력 포트의 값을 설정할 수 있습니다.

start_mode_step 이 처음 호출될 때 확인될 수 있습니다.

working_mem 에 저장된 값은 _step 가 다시 호출 되더라도 변하지 않으므로 정보를 저장하는 용도로 사용이 가능합니다.

만약 여러분이 잘못된 타입의 입력을 받은 등의 이유로 에러를 호출하고 싶으시다면, 에러 메시지를 문자열로 반환하면 됩니다. 모든게 정상이라면, 다음에 호출할 시퀀스 포트의 id를 반환하면 됩니다. 만약 다음에 호출할 것이 없다면 그냥 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 를 추가한 후 선택하고 여러분의 커스텀 노드 스크립트를 인스펙터(Inspector)에 보이는 script 속성에 드래그 하시면 됩니다.

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

결과:

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