Système de Munition

Blueprint visual scripting, programmation nodale, tutoriels et astuces, introduction au langage Verse
Avatar de l’utilisateur
eradev
Messages : 21
Inscription : 23 juin 2023, 13:24

Bonjour à tous, actuellement en train de faire un projet FPS je suis en train d'élaborer un système de munition complet sur le blueprint de mon arme, j'ai appris sur plusieurs tutos différents en adaptant mon code, jusque la tout allait bien mais maintenant je suis un peu perdu car je rencontre des petits soucis :

La fonction de Rechargement sur le child actor de mon perso ne ce déclenche pas (l'arme équiper par défaut de mon personnage en jeu) , en revanche les armes que je ramassent elles oui...

J'ai une fonction qui me permet de ramasser une arme à l'aide de la touche E, mais une fois celle-ci ramassé, lorsque je rappuie sur la touche E, mon arme ce clone sans pour autant que j'en ramasse une nouvelle.


Je vous joint des screens : ne vous fier pas à au nom des blueprints, ils font tous partie du blueprint arme :

EDIT : SCREEN DANS LE MESSAGE PLUS BAS
Dernière modification par eradev le 25 juin 2023, 15:07, modifié 3 fois.
Avatar de l’utilisateur
Mark Landers
Messages : 139
Inscription : 17 nov. 2022, 09:56

Salut, les liens de tes images ont sauté, si tu pouvais les re-uploader ailleurs ça nous permettrait de t'aider ;)
Avatar de l’utilisateur
eradev
Messages : 21
Inscription : 23 juin 2023, 13:24

Mince, comme voici :

FONCTION RECHARGE :

Image

APPEL DE LA FONCTION RECHARGE 1/2 :

Image

APPEL DE LA FONCTION RECHARGE 2/2 :

Image

FONCTION RAMASSER ARME :

Image
Avatar de l’utilisateur
Alex
Messages : 18
Inscription : 27 sept. 2022, 12:32

Salut,

1. RECHARGER ARME :
Au niveau de ta touche : "Recharge" Tu as un branch avec Munition Max != 0. Il ne faut pas mettre la variable munition max (qui reste toujours à 30 puisque c'est le nombre de balles dans un chargeur plein) mais la variable munition (c'est-à-dire le nombre de munitions qu'il reste dans ton chargeur).

Tu peux supprimer la fonction recharger et tu remplaces ça simplement par un "set munition" et la valeur sera "get munition max"

Quant tu tires vérifies bien que tu retires les balles à ta variable munitions et pas munition max.

Attention si tu utilises plusieurs armes dans ton jeu, il est plus logique de mettre les variables munitions max et munition dans les BP des tes armes.


2. RAMASSER ARME :
Pour ramasser une arme. Dans le BP de ton personnage, ajoute un bool que tu nommes "peut ramasser" et une variable actor que tu nommes "arme ramassable".
Quand le joueur entre dans la box col de l'arme tu fais ton cast sur ton perso et tu fais set "peut ramasser" True et Set "arme ramassable" = self
Quand le joueur sort de la box (on end overlap) tu fais set "peut ramasser" False et Set "arme ramassable" = none

Dans le BP de ton personnage lorsque tu appuies sur la touche E, tu ajoutes un branch pour vérifier que le joueur peut ramasser l'arme (variable "peut ramasser"). Si Faux il ne se passe rien. Si Vrai tu fais get arme, Set child actor class, get "arme ramassable", get class default et tu relies ça à ton Set child Actor class.
Avatar de l’utilisateur
eradev
Messages : 21
Inscription : 23 juin 2023, 13:24

Je te remercie pour ta réponse, je vais essayer et je reviens poster mon avancement ici.
Avatar de l’utilisateur
eradev
Messages : 21
Inscription : 23 juin 2023, 13:24

Dans le BP de ton personnage lorsque tu appuies sur la touche E, tu ajoutes un branch pour vérifier que le joueur peut ramasser l'arme (variable "peut ramasser"). Si Faux il ne se passe rien. Si Vrai tu fais get arme, Set child actor class, get "arme ramassable", get class default et tu relies ça à ton Set child Actor class.
Donc je divise mon code en 2 ? la première partie dans le BP Arme, et la suivante dans le perso ? (c'est à dire à partir de l'appui de la touche E)
Set "arme ramassable" = self
Je n'ai pas vraiment compris ce passage...
Avatar de l’utilisateur
Alex
Messages : 18
Inscription : 27 sept. 2022, 12:32

L'idée est de faire un BP_Arme dans lequel tu mets toutes les variables liées à ton arme (Mesh, munitions, dégâts, particules, son tir, son rechargement, etc.). Pour créer d'autres armes tu auras juste à créer des BP child qui vont récupérer toutes les variables de ton BP_Arme (pour faire ça tu fais un clic droit sur ton actor BP_arme et tu fais "create child BP class").

Dans le BP_arme tu mets une box pour vérifier si ton perso peut interagir avec l'arme (tu peux par exemple créer un bool "can interact" dans ton perso : si le perso est dans la box "can interact" est vrai, si le perso sort de la box, "can interact" est "faux").

Dans ton perso
Tu crées un bouton "interraction" lié à ta touche E et avec un branch tu vérifies si "can interact" est vrai ou faux. Problème : il faut savoir quelle arme ton perso doit ramasser Donc, tu crées toujours dans ton perso, une variable BP_arme que tu appelles "arme ramassable".

Tu reviens dans ton BP_arme. Si le perso est dans la box tu appelles la variable "arme ramassable" créée dans ton perso, tu tires ton pin dans le vide et tu choisis "self" pour dire que l'arme ramassable correspond à ce BP_arme en question.

Pour finir, dans ton perso, maintenant que tu as une variable "arme ramassable" qui correspond à un BP_arme, tu continues ton code pour attacher cette variable BP_arme à ton perso.
Avatar de l’utilisateur
Alex
Messages : 18
Inscription : 27 sept. 2022, 12:32

Petite précision : dans ton code, tu as mis la touche E dans ton BP_arme. Tous les boutons doivent être dans le BP de ton perso. C'est le perso qui fait les actions (ramasser, tirer, courir...) et pas les objets !
Avatar de l’utilisateur
eradev
Messages : 21
Inscription : 23 juin 2023, 13:24

Merci beaucoup pour tes éclaircissements, c'est vrai qu'il faut utiliser la logique dans ces cas la.

BUG RECHARGEMENT (résolu)

Appel Fonction Rechargement 1/2 :
Image

Appel Fonction Rechargement 2/2 :
Image


BUG RAMASSER ARME (en cours...)

Fonction Ramasser Arme 1/2 :
Image

Fonction Ramasser Arme 2/2 :
Image
Dernière modification par eradev le 01 juil. 2023, 15:50, modifié 1 fois.
Répondre