Nœuds VisualScript personnalisés

Avertissement

Godot 4.0 supprimera entièrement le VisualScript du noyau. Par conséquent, la création de nouveaux projets utilisant VisualScript dans Godot n'est pas recommandée. Les futures versions de Godot 4.x peuvent avoir le VisualScript réimplémenté comme une extension.

Alors que Godot 3.x conservera le support de VisualScript, nous recommandons d'essayer GDScript à la place, surtout si vous avez l'intention de migrer votre projet vers Godot 4.

Les nœuds personnalisés sont écrits en GDScript et peuvent ensuite être utilisés en VisualScript. Ceci est utile pour écrire du code complexe en GDScript et le réutiliser.

Création d'un nœud personnalisé

Créez un nouveau script qui extends VisualScriptCustomNode et mettez un mot-clé tool en haut. Ceci est nécessaire pour que le script s'exécute dans l'éditeur.

Certaines fonctions peuvent être crées pour définir les valeurs des paramètres du nœud personnalisé. Il suffit d'ajouter les fonctions nécessaires, une fonction _has_input_sequence_port n'est pas nécessaire si elle doit retourner false (Faux) par exemple.

La partie la plus importante d'un nœud personnalisé est la fonction _step. La logique du nœud y est définie.

Les paramètres d'entrée inputs contiennent la valeur des ports d'entrées.

Le paramètre de sorties outputs est une liste où les indices représentent les identités (ids) des ports de sortie. Il peut être modifié pour changer les valeurs des ports de sortie.

La méthode start_mode peut être utilisée pour vérifier si _step est appelée pour la première fois.

working_mem est conservé entre chaque appel de _step. Il peut donc être utilisé pour stocker des informations.

Si vous voulez faire remonter une erreur, par exemple si les types d'entrée sont incorrects, vous pouvez retourner le message d'erreur sous forme de chaîne de caractères. Lorsque tout va bien, retournez l'identifiant (id) du port de séquence qui doit être appelé après. Si votre nœud personnalisé n'en a pas, retournez simplement 0.

Exemple :

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

Utilisation d'un nœud personnalisé

Pour utiliser le script, ajoutez un CustomNode, sélectionnez-le et faites glisser votre script de nœud personnalisé dans la propriété script affichée dans l'inspecteur.

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

Résultat :

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