Unity Physics

Dit wordt een langer artikel... hou je vast!

Aangezien ik een escaperoom maak in VR, wilt dit dus zeggen dat we dingen moeten kunnen vastnemen, gooien, verplaatsen...

Na het invoeren van de test-models besloot ik om even te experimenteren met de verschillende basis-interactiemogelijkheden.



Interacties

XR Rig

Vooraleer we zwaartekracht gebruiken of dingen willen vastnemen moeten we eerste onze controllers ook op het scherm zien. Dit doen we via een XR Rig.

Als je het startbestand van Unity VR hebt gebruikt, zal je zien dat dit al aanwezig is in je project.

Als dit nog niet het geval is, zal je volgende dingen moeten aanmaken: Maak eerst een Empty gameObject aan, en noem het XR Rig. In je XR Rig steek je je Main Camera, je Left- en Righthand Controller.

Aan beide controllers koppel je het 'XR-Controller (action based)' script, en je zou goed moeten zitten om te beginnen.

Gravity

Om te beginnen wilde ik de zwaartekracht eens uitoefenen op een object. We beginnen met het toevoegen van een Box Collider op de muren / vloer / plafont van onze kamer. Dit doe je via add ComponentBox Collider.

We willen de zwaartekracht op een balletje laten werken. Voeg op je balletje een 'Sphere Collider' toe net zoals je een Box Collider zou toevoegen.

Daarna voeg je ook de Rigidbody component toe op je object, en vink je Use Gravity aan.

Positioneer je balletje een meter boven de grond, en druk op 'Play' van je project. Je balletje zou nu op de grond moeten vallen.

Uiteraard kan je spelen met de verschillende waarden van de componenten, maar daar ga ik nu niet dieper op in gaan. Kijk gerust enkele tutorials die meer in detail gaan over het gebruik van zwaartekracht, maar dit als basis zou moeten volstaan.

Complexere objecten

Op een balletje kan je gemakkelijk een Sphere Collider toevoegen, maar op een plant?

Om op complexere objecten een Collider te zetten, maken we vaak gebruiken van de component Mesh Collider. Mesh Collider zal zijn uiterste best doen om de vorm van je object zo goed mogelijk te volgen, maar heeft ook zijn gebreken.

Als je een kastje hebt bijvoorbeeld, zal de Mesh Collider de holte niet herkennen, en dus opvullen met een denkbeeldig vlak, met als gevolg dat je er dus niets kan ingooien bijvoorbeeld.

Om dit op te lossen zal je moeten werken met verschillende Box Colliders binnen 1 object. Je kan dit best doen door een 'Create Empty' te doen, en je Box Colliders toe te voegen op de Empty GameObjects.

Dit is redelijk wat werk, maar zeker de moeite!

Grabbable Object

Stel, we willen het balletje nu ook vastnemen met onze handen (controllers).

Daarvoor voegen we simpelweg een nieuwe component genaamd XR Grab Interactable toe aan ons object.

Zorg ook zeker dat volgende parameters correct staan:

Extra:

Een bal was nu een vrij eenvoudig voorwerp, maar wat als je complexere objecten wilt vastnemen?

Een rugzak bijvoorbeeld wil je niet in het midden, maar een het lusje vastpakken. Rechter-klik op je object, Create Empty en geef je Empty GameObject de naam 'Attach'.

Nu kan je je 'Attach' herpositioneren naar de lus van je rugzak.

Sleep nu je 'Attach' in de Attach Transform van je XR Grab Interactable, en voila! Je kan nu rugzak vastnemen een het lusje.

Nu je eerder welk voorwerp kunt vastnemen, kan je er ook al mee gooien. Zorg dat ieder element in je scene enkele Mesh Colliders of Box Colliders hebben, anders zal je object onwerkelijk reageren op sommige andere objecten.

Andere Physics

Er zijn nog tal van mogelijkheden, maar voorlopen neem ik genoegen met deze basis-interacties.

Later zal ik nog uitzoeken hoe je met verschillende Joint Components een ketting kan maken, een deur kan openen, of een kastje kan openen.