4. Raycast Hit Detection

Implementeer instant-hit raycast shooting met accurate central aiming

Overzicht

In dit hoofdstuk implementeer je een shooting systeem met instant hit detection. Je maakt een target om op te schieten en gebruikt een central raycast voor accurate aiming - precies waar je crosshair naar kijkt.

Target scene maken

circle-check
circle-check

AimRaycast Toevoegen

In FPS games is het belangrijk dat je schiet waarop je mikt. De meeste games gebruiken een raycast systeem waar de crosshair in het midden van het scherm exact overeenkomt met wat je raakt.

Voeg een RayCast3D toe aan de camera die altijd recht vooruit kijkt - dit is wat de crosshair vertegenwoordigt.

circle-check

Scene hierarchy:

Railgun fire method

Wanneer de speler schiet, geeft de Player de volledige raycast door aan het wapen. Het wapen kan dan zelf bepalen wat er geraakt is en waar precies de hit was. Dit geeft ons alle informatie die we nodig hebben: het geraakt object én het exacte collision point.

Pas daarom het Shoot-signaal aan van de Player, zodat het de raycast meegeeft als parameter. Daarna passen we het Railgun script aan om te checken of de raycast een Target raakt en deze te vernietigen.

circle-check
circle-check

Uitleg:

  • RayCast3D raycast: De volledige raycast van de Player

  • raycast.GetCollider(): Haal het geraakt object op

  • is Target targetHit: Pattern matching - check type en cast in één keer

  • targetHit.OnHit(): Roep de OnHit method aan op het Target object

  • Nu gebruiken we ook raycast.GetCollisionPoint() om de beam te updaten naar het exacte hit point

Beam naar hit point

Nu we de raycast hebben, kunnen we de beam visualisatie updaten zodat deze naar het exacte collision point wijst in plaats van alleen vooruit.

circle-check

AimRaycast Toewijzen

circle-check

Target script

Nu maken we het zo dat targets vernietigd worden wanneer ze geraakt worden door de raycast.

circle-check
circle-check
circle-info

Waarom een _root field? Door de root node expliciet toe te wijzen, kan het script werken met verschillende scene structuren. Later kunnen we dit script hergebruiken voor enemies die misschien een andere node hierarchy hebben.

Target destruction

Nu hoef je alleen nog de OnHit()-methode op het Target object aan te roepen wanneer het Railgun een Target raakt.

circle-check

Test het shooting system

circle-check
circle-info

Troubleshooting:

  • Raycast raakt niets? Check of AimRaycast Enabled is en Target Position correct is (-100 in Z)

  • Targets verdwijnen niet? Check of je de AimRaycast hebt toegewezen in de Player Inspector

  • "Hit: ..." verschijnt niet? Check of het Shoot signaal correct is verbonden met het Railgun

Complete scripts

chevron-rightDe volledige Target, Player en Railgun scripts:hashtag

Target.cs

Player.cs (_Process method)

Railgun.cs (Updated)

Laatst bijgewerkt