Gaming28.03.2014

Dev-log: Collision Detection, essentieel in gamedevelopment


Een muur is geen muur wanneer je er gewoon doorheen kunt lopen. In games heb je hier collisions voor nodig. Simpel gezegd gaat het om een model wat beschrijft waar een voorwerp iets tegen houdt. Dit model kan exact hetzelfde zijn als de graphics (zowel 2D sprite als 3D model) of kan een simpelere vorm zijn zoals een cirkel of een kubus. Maar collisions dienen voor meer dan enkel dingen tegen te houden, zo kunnen ze worden gebruikt om dingen te triggeren en zijn ze essentieel om een object een ander object te laten herkennen.

dev-log-collision-detection-essentieel-i.jpg
dev-log-collision-detection-essentieel-i.jpg

Een kogel mag niet door een muur heen. Dat is makkelijk, je zorgt voor een collision model van de kogel en de muur en je bent klaar toch? Vaak niet, afhankelijk van de engine kunnen er verschillende dingen gebeuren. Zo kan een kogel gewoon door de muur heen gaan of blijft de kogel tegen de muur aanhangen. In het eerste geval zal moeten worden gecontroleerd of de plek waar de kogel naartoe wil vrij is van een collision model. Als de kogel tegen de muur blijft hangen wil je dat deze op de grond valt of verdwijnt.

Vrijwel elke engine heeft daar een oplossing voor. Zo zijn er speciale functies of events die bepaalde zaken regelen, zoals wanneer twee objecten elkaar raken, of wanneer twee objecten elkaar niet langer raken.

Omslachtig? Misschien wel, maar het geeft veel vrijheid. Collisions zijn namelijk ook handig voor andere zaken, bijvoorbeeld als je iets wilt triggeren. Je kan dit doen door de afstand van de speler tot een bepaald punt te berekenen, maar een collision met een speciaal object is dan makkelijker. Met behulp van de bovengenoemde functies kun je dan een ‘wanneer object speler dit raakt’ situatie maken, terwijl de speler er gewoon doorheen kan lopen.

Uiteraard zijn collisions ook belangrijk voor een goede AI, je wilt immers niet dat deze door muren loopt. Maar je wilt natuurlijk ook niet dat hij naar een muur toeloopt en dan pas ontdekt dat hij er niet doorheen kan. Door collisions kunnen objecten elkaar herkennen en zo bepalen waar muren zijn. Zo kan een pad worden berekent langs alle muren af.

Collisions doen dus meer dan slechts dingen solide maken en zijn een van de pilaren van een game. Ze zijn niet de oplossing voor alles, maar zeker in combinatie met andere functies en berekeningen zijn ze erg handig. Belangrijke dingen dus, die collisions!

In de dev-log artikelen vertel ik elke week hoe het vordert met de game waar ik aan het werken ben, of licht ik een technische of design kant van het maken van games toe.

Marnix Suilen

Schrijft al jaren over games, van de kleine indie-games tot de grote najaarstitels. Liefhebber van Dota 2, twijfelt nog over Destiny.