Prodonfeur, oh profondeur!

En début d’année j’avais mis en place un système de collision reposant sur les axis-aligned bounding box (AABB). Cela fonctionnait et fonctionne toujours très bien. Voilà que cette semaine, je me suis enfin décidé à travailler sur un niveau pour mettre en place le gameplay, le rythme de jeu et donc tester « en condition » tous ce que j’avais écrit comme code jusqu’à présent.

J’en arrive aux NPCs terrestres. Depuis le début je veux les inclure dans le jeu mais, j’ai toujours repoussé leur intégration. Naïvement je me suis dit que le code AABB allait marcher comme sur des roulettes…que nenni! J’ai remarqué que plus le NPC  était en-dessous du plan (Y = 0) sur lequel évolue le joueur, plus le zone de collision était désaxée. On observe clairement ce phénomène due à la projection en plaçant deux NPCs à la verticale, l’un avec un Y à 0 et un second à -35 par exemple.

Vue dans l'éditeur / Vue ingame

Bien que les coordonnées X et Z servant au test de collision soient identiques, la collision du NPC à -35 se fait au niveau du NPC à 0. Je me suis donc attaché à trouver comment corriger cela. Après des journées à potasser de la doc sur les projections, tester des ratios ne fonctionnant qu’une fois sur trois, je me suis replongé dans la doc officiel de Gamecore…j’aurais dû faire ça depuis le départ.

La solution se résumait en un mot : ProjectToScreen.  J’avais pensé le AABB à partir des « coordonnées world » donc quand les objets évolues sur le même plan il n’y a aucun problème. Pour éliminer la contrainte de la profondeur, il faut simplement convertir les coordonnées world en coordonnées normalisées grâce à la fonction ProjectToScreen et effectuer les collisions AABB sur ces dernières.

Au final, je retiens une chose : lire d’abord la doc officielle avant de partir sur de « grandes » formules.

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s