1°- Les collisions d'objets 2D
Godot propose 2 notions dans les systèmes de collision. La notion de zone (area) et la notion de corps (body):
-Area peut être considérer comme une zone fantôme (qui peut être traversée).
-Body peut être considérer comme une zone matérielle (qui ne peut pas être traversée).
​
Il vous faudra par la suite délimiter vos types de collisions par une surface et/ou une ligne:
-CollisionPolygon2D
-CollisionShape2D
-Raycast2D



2°- Créer son personnage - KinematicBody
Le nœud KinematicBody possède un ensemble de fonctions facilitant le déplacement et les interactions de vos personnages, vos ennemis et vos ''objets mobiles''. Pour notre exemple, nous allons compléter ce nœud avec les nœuds Sprite (pour l'image) et Raycast2d (pour gérer les collisions).
KinematicBody nous permet d'accéder à certaines fonctions (méthodes):
-Move_and_collide()
-Move_and_slide()
-Move_and_slide_and snap()

3°- Créer son personnage - Raycast2D
Le nœud Raycast2D peut être comparer à un pointeur laser ou à un œil. Pour notre exemple, ce sera un détecteur d'obstacle.
Nous avons ajouter 4 Raycast2D. Chacun correspond à un coté de notre "Sprite" (haut, bas, gauche, droite):
Dans l'onglet "Inspecteur", vous pourrez :
-Paramétrer la longueur du votre Raycast avec "Cast To".
-Définir quel type de collision votre Raycast détectera (un corps/Bodies, une zone/Areas) avec "Collide With"
​


3°- Comprendre la méthode 'Move and Slide()'
Cette "méthode" prend en charge le déplacement et certaines interactions de vos objets, personnages, etc... Si ces derniers entrent en collision, ils contourneront ou glisseront le long de l'obstacle (l'obstacle doit être de type "body" pour que cela soit actif).
​
Move_and_slide () doit être intégré dans la boucle "func _physics_process(delta):" de votre script.
​
move_and_slide ()
-linear_velocity: Vecteurs x,y,z de déplacement de l'entité.
-up_direction: Définir le point haut (permet d'utiliser les fonctions is_on_floor, is_on_wall et is_on_ceiling).
-stop_on_slope: L'entité arrête de se déplacer s'il y a une pente.
-max_slides: le glissement s'arrête jusqu'à une certaine valeur.
-floor_max_angle: Considérer comme "le sol" jusqu'à un certain angle.
-infinite_inertia: Interaction avec une entité de type RigidBody.
4°- Le script
​
extends KinematicBody2D
​
export (int) var vitesse = 300
var velocity = Vector2()
​
func Controle_Clavier():
velocity = Vector2()
if Input.is_action_pressed("ui_right")and$Ray_Droite.is_colliding() == false:
velocity.x += 1
if Input.is_action_pressed("ui_left")and $Ray_Gauche.is_colliding() == false:
velocity.x -= 1
if Input.is_action_pressed("ui_down")and $Ray_Bas.is_colliding() == false:
velocity.y += 1
if Input.is_action_pressed("ui_up")and $Ray_Haut.is_colliding() == false:
velocity.y -= 1
velocity = velocity.normalized() * vitesse
​
func _physics_process(delta):
Controle_Clavier()
velocity = move_and_slide(velocity)

5°- Créer un obstacle - StaticBody2D
Le nœud StaticBody va être utilisé principalement pour créer des objets immobiles (mur, plateforme, obstacle simple).
​
Pour notre exemple, nous utilisons une caisse. Le nœud CollisionShape2D permettra de définir les contours de collisions.
Dans l'onglet "Inspecteur", sélectionner votre forme de collision dans"Shape" (pour notre cas un rectangle).
​



