A partir du moment où le personnage passe à travers les murs et les objets, il faut trouver un moyen pour qu’il puisse interagir avec son environnement. Il va donc se servir de la force…
L’idée est que le personnage soit capable de produire une force qui interagit avec certains éléments de l’environnement. La force se déclenche en appuyant sur la barre d’espace. Plus la barre est maintenue, plus la force augmente en intensité (jusqu’à une limite qui peut être paramètrée).
Au début j’avais utilisé un raycast sur le personnage et la force s’appliquait à l’endroit où le raycast touchait l’objet. Mais cela avait plusieurs inconvénients : d’une part le personnage devait se trouver vraiment tout contre l’objet et bien en face pour que le raycast le touche, d’autre part si la force s’appliquait sur un objet sphérique, la direction qu’il prenait était très ingérable.
Pour résoudre ces problèmes, j’ai remplacé le raycast par une zone sphérique, et la force s’applique à présent sur le centre de l’objet cible dans la direction du personnage.
Voici le résultat avec la balle de l’exemple précédent. On peut voir aussi que la balle rebondit bien contre le mur.
Le mécanisme demande encore quelques améliorations, la principale est qu’il faudrait une animation (et un son) qui montre(nt) que la force est en train de ‘charger’. Je pourrais aussi envisager que le personnage subis un recul, ça rendrait l’effet plus réaliste.
Je devrais aussi faire des tests avec des objets de différentes formes et avec différents paramètres pour mieux estimer comment ça peut être utilisé dans le jeu.
Le code source du projet est disponible ici.