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.
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.