Inhoud
Wat vooraf ging
- U bent vertrouwd met de werkomgeving van Unreal Engine.
- U bent vertrouwd met object georiënteerd programmeren.
- U bent vertrouwd met het Gameplay Framework van Ureal Engine.
- U bent vertrouwd Vectoren.
Gebruikte terminologie
Tracing
Traces offer a method for reaching out in your levels and getting feedback on what is present along a line segment.
Inleiding
Deze handleiding bouwt verder op de handleiding Bewerkingen in 3D – Inleiding.
Situering
De situering van deze handleiding binnen het Blueprint Schematisch Overzicht.
Tracing
Tracing is een methode om te controleren of u “iets” kunt raken, of er “iets” in de weg staat (line of sight) en informatie te krijgen over dit “iets” (meestal een actor).
Deze methode bestaat uit het trekken van een trace (meestal als een lijn maar eventueel ook in de vorm van een sphere, capsule of een box) vanuit een startpunt naar een eindpunt en resulteert in een Out hit als de trace iets raakt.
Tracing gebruikt het physics system.
Hieronder ziet u een basis LineTraceByChannel en de volledige Hit-resultaten.
We gaan dit nu verder in zijn variaties en details bespreken.
Bepalen wat er moet getraceerd worden
U zal niet altijd alles willen traceren, u zal wellicht slechts een bepaald type van objecten/actors willen traceren.
Bepalen wat u wilt traceren kan op 2 manieren:
- By Channel
- By Object type
By Channel
Hieronder ziet u een Line Trace By Channel. By Channel komt standaard met 2 opties: Visible of Camera.
Stel, u doet een tracing By Channel op Visible. Welke objecten (actors) zal hij dan kunnen zien?
Alle objecten waarvoor de Collision Presets – Collision Responses – Trace Responses – Visibility niet op Ignore staat (dus op Block of Overlap). Het verschil tussen Block en Overlap is van belang als u een Multiple Trace uitvoert. Een Multiple Trace geeft immers alle Overlaps tot en met de eerste Block weer.
Oké, tof, en waar vinden we dat?
- Selecteer bv. de CubeMesh in uw level.
- Ga naar het Details-panel.
- Onder Collision ziet u dat de Collision Presets op Default staat.
- Wijzig nu de Collision Presets van Default naar Custom… en u merkt op dat u de instellingen voor Visibility en Camera kunt wijzigen.
Ze staan momenteel op Block dit betekent dat ze, net als bij Overlap, zullen ontdekt worden door de respectievelijk Channel tracing. Wilt u dat ze niet ontdekt worden dan moet u Ignore instellen.
Moest u zich afvragen wat het verschil nu is tussen Visibility en Camera, wel in wezen zijn dit gewoon benamingen van categorieën die verder niet veel uitmaken. U kunt zelf eigen benamingen toevoegen als u dit verkiest.
- Ga naar het menu Edit – Project Settings… – Engine – Collision.
- Klik op New Trace Channel en geef een gewenste naam en een Default Response.
- Bevestig met Accept.
U hebt een nieuw Channel aangemaakt dat u terugvindt onder de Collision Presets.
By Object
Bekijk de schermafbeelding van hierboven nog eens (ze staat ook hieronder). Merk ook de Object responses op, wel dit zijn categorieën die u kunt gebruiken voor Tracing for Object.
Merk op dat het huidige Object Type voor de CubeMesh WorldStatic is en dat de Object Response voor WorldStatic op Block staat.
Hieronder ziet u een LineTracingByObject en enkel de objecten van het type PhysicsBody en Destructible zullen worden getraceerd.
Zoals u ziet is er een Array aangemaakt die de traceerbare Object Types bevat.
Net als voor Channels kunt u ook eigen Object Types toevoegen via het menu Edit – Project Settings… – Engine – Collision.
Single versus Multiple hits
Een Single trace zal enkel de eerst hit teruggeven, een Multiple trace zal alle hits van alle Overlaps tot en met de eerst Block teruggeven.
Ook bij Multi tracing hebt u de keuze tussen By Channel en By Object. Het resultaat is nu een array van hits.
Merk op dat de Return value enkel een True heeft als er een Block is en bij enkel en alleen maar Overlaps een False.
Niet enkel maar lijnen maar ook Sphere, Capsule of Box
U kunt niet enkel maar tracen met een lijn maar zo u wenst ook met een Sphere, Capsule of Box. Deze andere vormen kunnen gebruikt worden wanneer een lijn bv. te beperkend is, wanneer u over een ruimer gebied dan enkel maar een lijn wilt traceren.
Hieronder ziet u alle mogelijke vormen van tracing (op de hier traces by Profile na).
De start- en eindlocatie van de trace bepalen
We willen weten een ons ThirdPersonCharacter een ander object direct in het vizier heeft.
- Ga naar de ThirdPersonCharacter Blueprint door bijvoorbeeld in de World Outliner te klikken op Edit ThirdPersonCharacter.
We zouden kunnen de tracering starten vanuit het camerastandpunt, maar aangezien de camera boven ons karakter “zweeft” is dit niet echt correct, beter is te starten vanuit het CapsuleComponent.
- De WorldLocation, die u opvraagt via de functionaliteit GetWorldLocation, is het Startpunt van onze LineTraceByChannel.
- Voor het eindpunt hebt u eveneens de WorldLocation, die u opvraagt via de functionaliteit GetWorldLocation, nodig van de CapsuleComponent maar u moet ook nog de richting waarin het ThirdPersonCharacter “kijkt” weten, die u opvraagt via Get Forward Vector.
- Vervolgend trekt u de trace door de Forward Vector te “verlengen” (vermenigvuldigen met bv. 1000) en dit op te tellen bij de startlocatie. Dit vormt ons Eindpunt.