I. Sommaire▲
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.
II. Vidéo▲
Godot - Marble Madness 3D - Collectionner les objets
III. Résumé▲
Actuellement, le joueur rebondit contre les objets à collectionner. Ce n'est évidemment pas ce que nous souhaitons, car le joueur doit être capable de ramasser ces objets.
III-A. Identifier les objets à collectionner▲
Nous devons trouver un moyen d'identifier tous les objets à collectionner. Pour cela, nous allons associer un groupe que l'on appellera « pick up » et chaque objet à collectionner fera partie de ce groupe.
Comme nous éditions la sous-scène et que chaque objet à collectionner et une instance de cette sous-scène, chaque objet intègrera ce groupe.
III-B. Retirer le rebond de la balle avec les objets à collectionner▲
Pour que la balle ne rebondisse plus avec les objets à collectionner, il faut cocher la propriété « Trigger » du nœud « CollisionShape ». Ainsi, les effets physiques entre les objets à collectionner et la balle n'auront plus lieu.
Toutefois, nous devons pouvoir déterminer si la balle est en collision avec l'un de ces objets. Pour ce faire, nous devons aussi cocher la propriété « Contact Monitor » du nœud « RigidBody » du joueur.
De plus, nous pouvons définir la propriété « Contacts Reported » à 2, sachant que notre balle ne sera en collision qu'avec deux objets à la fois (le sol et un des objets à collectionner ou un mur).
III-C. Déterminer si une collision se produit▲
À chaque collision, les nœuds impactés envoient des signaux. Ici, nous allons connecter le signal « body_enter » du « RigidBody » du joueur à une fonction de notre script. À chaque début de collision, la fonction connectée sera appelée.
III-C-1. Script▲
Lorsqu'une collision se produit avec la balle, nous devons d'abord vérifier que l'objet qui est touché est bien un objet à collectionner (sinon, nous ne sommes pas intéressés). Si c'est bel et bien un objet à collectionner, nous le cachons et pour alléger la gestion des collisions, nous l'enlevons du groupe des objets à collectionner.
func _on_Player_body_enter
(
body ):
# Vérifions que l'objet touché est un objet à collectionner.
if
body.is_in_group
(
"pick up"
):
# N'affiche plus le cube
body.hide
(
)
# Retire l'objet à collectionner du groupe "pick up"
body.remove_from_group (
"pick up"
)
Le fait d'enlever l'objet à collectionner de son groupe ne sert pas qu'à l'optimisation des performances, mais aussi à compter le nombre d'objets restant à collectionner.
IV. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.