Godot - Marble Madness 3D

Terrain de jeu

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Sommaire

Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.

II. Vidéo


Godot - Marble Madness 3D - Terrain de jeu


III. Résumé

Nous souhaitons rajouter des murs pour empêcher le joueur de tomber du terrain ainsi que les objets à collectionner.

III-A. Murs

Le modèle que nous utilisons pour les murs est un cube. Nous créons un nœud « Spatial » qui sera le parent de tous nos murs. Ensuite, nous créons des nœuds enfants « StaticBody » faisant que la balle puisse se cogner dedans. Nous lui donnons une représentation graphique grâce à un nœud « MeshInstance » et une représentation physique grâce à « CollisionShape ».
Finalement, nous obtenons cette hiérarchie :

  • Walls (« StaticBody ») ;

    • West Wall (« StaticBody ») ;

      • « MeshInstance » ;
      • « CollisionShape » ;
    • East Wall (« StaticBody ») ;

      • « MeshInstance » ;
      • « CollisionShape » ;
    • North Wall (« StaticBody ») ;

      • « MeshInstance » ;
      • « CollisionShape » ;
    • South Wall (« StaticBody ») ;

      • « MeshInstance » ;
      • « CollisionShape » ;

Il est possible de dupliquer les nœuds pour aller plus vite dans la construction des murs.

III-B. Objets à collectionner

Les objets à collectionner sont des cubes disposés sur le terrain. Afin que le joueur puisse les ramasser, ceux-ci doivent avoir une représentation physique, comme les murs.

De plus, les objets à collectionner vont être animés. Pour ce faire, il ne faut plus utiliser un « StaticBody », mais un nœud « KinematicBody ».

III-B-1. Animation

Les objets à collectionner sont animés à l'aide d'un script.

 
Sélectionnez
extends KinematicBody

# Vitesse de rotation pouvant être modifiée à partir de l'éditeur
export var speed = 0.05

# Vitesse de rotation pour chaque axe
var x_rot = 15
var y_rot = 30
var z_rot = 45
# Vecteur unitaire pour chaque axe
var x_axis = Vector3(1,0,0)
var y_axis = Vector3(0,1,0)
var z_axis = Vector3(0,0,1)

func _ready():
    # When this node enters the scene, start calling its
    # _process() method for per-frame logic
    set_process(true)

func _process(delta):
    # Récupère l'orientation actuelle
    var xform = get_transform()
    # Modifie l'orientation actuelle 
    xform = xform.rotated(x_axis, x_rot * delta * speed)
    xform = xform.rotated(y_axis, y_rot * delta * speed)
    xform = xform.rotated(z_axis, z_rot * delta * speed)
    # Définit l'orientation à la nouvelle valeur
    set_transform(xform)

III-B-2. Patron

Une fois le nœud complètement configuré, vous pouvez en faire un patron en le transformant en sous-scène :

Scene → Convert To… → Subscene…

Ainsi, vous pouvez réutiliser cette sous-scène comme patron de tous vos objets à collectionner.

Ensuite, nous créons un groupe d'objets dont le parent est un nouveau nœud « Spatial » et dont tous les enfants sont des nœuds de sous-scène que nous venons de créer.

IV. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

En complément sur Developpez.com

  

Copyright © 2015 Kwesi Davis. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.