J'ai écrit le code de balle pour PlanetSide. Nous avions quelques projectiles "hitscan", mais nous les avons simulés du mieux que nous pouvions, compte tenu des contraintes de la CPU et du nombre énorme de balles en jeu à tout moment.
Dans le cas de hitscan, l'impact est déterminé dans le même cadre que l'entrée est reçue, souvent en utilisant un seul raycast. Ceci est approprié pour des armes telles que les lasers ou autres projectiles extrêmement rapides. Nous avons réussi notre frappe en augmentant la vitesse initiale du projectile à une vitesse telle qu’elle traverserait le plateau de jeu en un seul clic.
Les balles non touchées sont cochées, soit en fonction du temps du cadre graphique, soit selon un pas fixe, et des calculs sont effectués pour l’accélération (pensez aux fusées), la gravité, la friction de l’air, le guidage (pensez aux projectiles à recherche de chaleur), etc. L'objectif étant de générer la position terminale du projectile pour le pas de temps. Une fois que les points de départ et d'arrivée sont établis, un ou plusieurs rayons peuvent être lancés pour se rapprocher de la trajectoire de vol et détecter toute collision qui aurait eu lieu pendant le vol.
Dans les projectiles HitScan et non HitScan, ce qui se passe lors d'une collision dépend des propriétés de vos projectiles et de la surface que vous impactez. Par exemple, vous pouvez toucher une surface dure, auquel cas vous pouvez vérifier votre compte de rebond et ajuster la position et la vélocité par réflexion, ou faire exploser le projectile si vous avez atteint votre compte de rebond maximum. Dans ce système, une fusée a un nombre maximal de rebonds de 0. Vous pouvez toucher une surface molle, puis vérifier votre pouvoir de pénétration pour déterminer si le projectile doit continuer à traverser la matière, etc.
C'était un code amusant à écrire. En outre, il est extrêmement utile d’écrire une bonne visualisation de débogage de ce qui se passe pour pouvoir inspecter visuellement les trajectoires de vol, les événements, etc.