Il existe 4 principale méthodes de communication entre Blueprint :

  • Communication Direct
  • Le Casting
  • Les Blueprint Interface
  • L’Event Dispatcher

Chaque méthode offre des avantages et des inconvénients. Il n’y a pas de mauvaises méthodes mais il y a des mauvaises utilisation.

Rappel pour bien abordé cet article : lorsque l’on parle de communication entre script, il y a toujours un script « émetteur » et un script « récepteur ». Dans Unreal, le script émetteur est appelé « Working Blueprint », le script récepteur est appelé « Target Blueprint »

Direct

Il s’agit d’une communication d’un script A vers un script B « en dur ». Ce type de communication ne permet aucun procéduralisme. Elle n’est établi qu’entre une instance d’un Actor vers un instance d’un autre Actor.

Ce type de communication est adapté pour des « actions uniques » entre deux scripts.

Exemple : lorsque vous avez un switch qui peut ouvrir une porte, et une seul porte, il est possible d’utiliser une communication direct.

Communication direct : didacticiel

Dans cet exemple nous allons crée un Trigger qui ouvre une porte.

Nous avons besoin de deux Actors :

  • Un Actor de porte qui contient les Static Mesh et dans l’Event Graph, un Event d’ouverturre et un Event de fermeture
  • Un Actor Trigger qui contient un plan (pour identifier la zone du Trigger et une Collision Box qui sert de Tripper Box. Dans l’Event Graph on va « Get Actor Of Class »

Actor de la porte

La porte est composé de deux meshs, le cadre et la porte. L’orgines de la porte est sur son point de pivot afin de simplement pourvoir utiliser une fonction « Set Relative Rotation » sur ce mesh pour obtenir l’animation d’ouverture et de fermeture de la porte.

Dans l’event graphe on crée deux Custom Event pour l’ouverture et la fermeture, puis on utilise un node « Timeline » pour crée une valeur flaot de 0 à 90 sur un temps de 1s :

Contenu du Node Timeline :

Actor du Trigger

Un simple plan et un box collision :

Dans l’Event Graph, sur l’Event Begin Play, on ajoute une fonction « Get Actor Of Class » (vers le BP de la porte) et on stocke l’instance dans une Variables (DoorRef) :

On rend cette variable public afin de pouvoir y accéder et renseigner l’instance de destination dans l’interface :

Ensuite, on créer deux évènements « Begin Overlap » et « End Overlap » sur le Box Trigger, on Cast vers le BP du personnage (pour verifier qu’il s’agit bien d’une action du joueur, cf, pour verifier que ce n’est pas un IA qui traverse le Trigger) et on déclenche les Custom Event « OpenDoor » et « CloseDoor » du Blueprint de l’Actor de la porte :

Fini :

Cast

WIP

Blueprint Interface (BPI)

Adapté aux communications direct de Blueprint vers différents Blueprints individuellement ou simultanément.
Exemple : lorsqu’un personnage interagit avec des objets de la scène.

Principe des Blueprint interfaces

Le principe est de créer un fichier Blueprint intermédiaires entre les scripts.
Ce blueprint contient une fonction « vide »
On va connecter les Working et Target Blueprint à ce Blueprint intermédiaire.
Le Working Blueprint va emmètre un message vers la fonction.
La fonction est exécuté et déclenche un event dans tous les scripts dans lesquels nous auront préalablement créer une connection avec le BPI.

Création du Blueprint interface

La Classe des Blueprint Interface est « Blueprint interface », tout simplement :

Ensuite on créer une fonction avec un nom facile à retrouver (BPI) et explicite :

Connexion au BPI

Dans tous les Working et Target Blueprint qui ont besoin d’emettre ou recevoir, on connecte notre BPI en Ajouter notre fichier BPI dans Class Settings > Implemented Interfaces :

Working Blueprint

Pour déclencher la fonction du BPI depuis le Working Blueprint, il faut aller chercher « une fonction message » en tapant le nom de notre fonction depuis un pin d’execution :

Target Blueprint

Dans tous les Blueprints qui devront recevoir l’informaiton du BPI, il faut aller chercher l’Event lié à la fonction.

Pour cela, il suffit de double cliquer sur le nom de notre fonction dans la zone à gauche de l’Event Graph :

Ensuite on construit le code qui sera déclenché à l’emission du message :

Event Dispatcher

Adapter à la communication entre un évènements et plusieurs Blueprint, cf, à la propagation de l’information d’un déclenchement d’un évènement dans la scène.
Exemple : Lors d’un jeu de course, un voiture se crash. L’event crash est lancé dans la scène, est alors déclenché le script qui envoi la Safety car, le script qui agite les drapeaux jaunes, le script qui lance la dépanneuse etc.

Principe des Event Dispatcher

Un event dispatcher est composé de 3 éléments :

  • Un Blueprint qui stock l’Event Dispatcher. Un event Dispatcher est une sorte de fonction qui « n’as qu’un nom ». N’importe quel Blueprint peut stocker un Event Dispatcher.
  • Un Working Blueprint dans lequel on va caster vers le Blueprint qui stock l’Event Dispatcher. Dans ce Working Blueprint, on va faire un Call vers l’Event
  • Un Target Blueprint dans lequel on va caster vers le Blueprint qui stock l’Event Dispatcher. Dans ce Target Blueprint, on va faire un « Bind Event to… » auquel on va attacher un Custom Event qui déclenchera du script a l’appel de l’Event Dispatcher.

Event Dispatcher didacticiel

Dans cette exemple nous allons simplement lancer des actions sur des Actors au passage dans un Actor Trigger

Création de l’Event Dispatcher

L’Event Dispatcher doit être stocker dans un Blueprint qui existe dans la scène. Il n’y a pas spécialement de règle ou de bonne pratiques. Vous pouvez stocker les Event Dispatcher dans un Blueprint qui existe nécessairement dans le runtime comme le GameMode, le GameInstance, le Level Blueprint.

Une solution pratique est de les stocker dans le GameInstance Blueprint. L’avantage est qu’il est indépandant du GameMode et disponible dans n’importe quel niveau.

Dans le GameInstance Blueprint, il suffit de clique sur + dans la section Event Dispatchers à gauche de l’Event Graph :

C’est tout pour la création de l’Event Dispatcher

Event Dispatcher : Working Blueprint

Ici, il s’agit simplement d’un Actor Trigger qui déclenchera notre Event Dispatcher

Dans l’Event Graph, après un Actor Begin Overlap, on fait un simple Cast vers notre Blueprint Game Instance custom.
L’Event Dispatcher est appelé par une fonction « Call… « 

C’est tout pour l’appel.

Event Dispatcher : Target Blueprint

Sur tous les Blueprints que l’on souhaite mettre en écoute il faut là aussi connecter l’ED via un cast vers le Game Instance custom. Comme on veut que ces blueprints soit en écoute dès le debut du jeu, on crée cette connexion sur l’Event Begin Play :

Comme on peut le voir, ensuite un fait un Assign (ou Bind + Custom Event, même chose plus longue) en cherchant le nom de notre Custom Event :

On termine en ajoutant le code a exécuté derrière le Custom Event :

Il faut répéter ce genre de script d’ecoute dans chacun des Blueprint qui doivent être en écoute de l’Event Dispatcher

Unbind

Dans un but d’optimisaiton, il faut unbind tous les événements qui ne sont pas cessé être répétés. Pour cela on utilise la fonction « Unbind » :