Avant cela, je vais te poser une autre question: la mécanique d’activation d’un clickable est toujours la même, est-il raisonnable de penser que ce serait une bonne idée de concevoir un component générique et de définir le comportement dans le graph du component de l’actor plutôt que d’écrire pour chaque type d’objet les server_requestInteract and multicast_confirminteract dans le character graph ? Je me suis probablement mal exprimé, je peux rephraser si tu veux
C’est une excellente question et tu as mis le doigt sur un principe fondamental d’architecture : la Composition.
Oui, c’est plus que raisonnable, c’est même la solution recommandée pour un projet qui va grandir. Si tu écris tout dans le Character, ton Blueprint va devenir un plat de spaghettis géant dès que tu auras 10 types d’objets différents.
L’approche par “Actor Component”
Voici comment structurer ce composant générique pour qu’il gère la réplication à ta place :
- Le Composant (
BPC_Interaction) :- Tu crées un Actor Component.
- Tu y places tes deux événements répliqués (
Server_RequestetMulticast_Confirm). - Ce composant devient ton “moteur de réplication” universel.
- L’Interface (Le complément indispensable) :
- Pour que ton composant puisse parler à n’importe quel objet (un coffre, une porte, un levier) sans faire de “Cast To” à chaque fois, tu crées une Blueprint Interface (ex:
I_Interactable). - Cette interface contient une fonction
ExecuteInteraction.
- Pour que ton composant puisse parler à n’importe quel objet (un coffre, une porte, un levier) sans faire de “Cast To” à chaque fois, tu crées une Blueprint Interface (ex:
- Le flux simplifié :
- Clic -> Le joueur appelle le composant.
- Composant -> Gère le rebond Serveur/Multicast.
- Multicast -> Dit à l’acteur propriétaire : “Hé, déclenche ton interface
ExecuteInteraction“.
Pourquoi c’est une bonne idée ?
- Propreté : Ton Character reste léger.
- Réutilisabilité : Pour rendre un nouvel objet cliquable, tu lui ajoutes juste le composant et l’interface.
- Maintenance : Si tu décides un jour de changer la manière dont le serveur valide un clic, tu ne le modifies qu’à un seul endroit (le composant).
Note technique : Attention cependant, les RPC (
Run on Server) ne fonctionnent dans un composant que si l’acteur qui possède ce composant appartient au joueur (comme ton personnage). Si tu mets le composant sur le coffre, on retombe sur le problème d’autorité. Le raccourci : Garde le composant d’interaction sur ton Character. C’est lui qui est ton “émetteur” universel.