Moi je voudrais juste répondre sur "s´il doit tester 1000000 collisions a chaque fois"
tu mets le doigt sur un probleme bien entendu résolu, mais qui a demandé de la recherche :
Je te prends, au lieu de GTA, l´exemple de Quake (qui est la meme chose)
Tu as un stage, un grand stage, avec des milliers de murs, des dizaines de milliers ! (et de sols et plafonds aussi)
Et, quand tu avances, il faut, bien sur, tester si tu ne bloques pas sur l´un d´entre eux.
Que faire ?
Si tu testes betement chaque mur du stage paye ton pross a refroidissement liquide pour gérer un petit stage....
L´idée est de se dire : je n´ai pas besoin de tester ce mur qui est a l´autre bout du stage :
je vais tester uniquement les murs qui sont autour de mon joueur !
Comment tester les murs autour du joueur ?
--> il suffit de les ranger astucieusement, dans des structures appelées OCTREE ou BSPTREE, ou VOXELS
ce sont des structures qui, en tres tres peu d´opérations, vont te renvoyer une petite liste (quelques dizaines a tout casser) de murs qui sont autour du point ou est ton joueur.
et ainsi, tu pourras tester la collision sur chacun des murs de cette petite liste, ce qui ne ralentira pas...
--> optimisation !!
Pour répondre a ta question sur les 10000 IF :
la commande "for" avec un if dedans te permet de n´écrire, par exemple, qu´un seul if, au lieu de 500 ....