Inhoud
- Wat vooraf ging
- Inleiding
- Physics Handle
- Physics Constraint
- Physics Components
- Praktische videovoorbeelden
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 met Vectoren.
- U kunt eenvoudige Physics gebruiken.
Inleiding
In deze handleiding wordt kennis gemaakt met Physics Components.
Voor de voorbeelden in deze handleiding heb ik me vaak laten inspireren door het YouTube-kanaal Lusiogenic waar u nog veel meer voorbeelden vindt.
Situering van deze handleiding binnen Unreal Engine
Physics Handle
Een Physics Handle Component kunt u gebruiken om een object vast te nemen.
- Start een nieuw First Person Desktop/Console project van Maximum Quality of voeg een First Person Desktop/Console project toe via Add New – Add Feature or Content Pack.
- Open de FirstPersonCharacter Blueprint die u normaal vindt in Content Browser in de Folder firstPersonBP – Blueprints.
- Voeg via Add Component een Physics Handle toe.
- Voeg ook een Scene Component toe. Deze Scene is een Placeholder waar we het object gaan vasthouden.
- Geef de Scene een passende naam (bv. GrabLocation) en plaats het als een Child onder de FirstPersonCamera.
- Positioneer de GrabLocation op een zekere afstand voor de Camera.
- Ga naar de Event Graph om te programmeren.
Als we de Rechtermuisknop indrukken (Pressed) gaan we het object opnemen (Custom Event PickUp), als we de Rechtermuisknop loslaten (Released) dan gaan het object weer loslaten (Custom Event Drop).
- Voor de Custom Even PickUp gebruiken we een LineTraceForObjects vanuit de FirstPersonCamera. We tracen alleen voor PhysicsBody. Onderstaande code is de uitwerking van zo’n LineTrace (herlees eventueel de handleiding over Tracing).
We gaan dus enkel objecten tracen met de Collision Presets PhysicsActor.
- Om een Actor/Component op te nemen vertrekt u vanuit de Physics Handle en zoekt u naar Grab Component at Location.
We integreren dit in onze code als volgt.
- De Output-pin Hit Component levert het Component op dat we “gehit” hebben met de LineTrace en dat we wensen vast te houden.
- Bewaar dit Component, voor later hergebruik, in een variabele met bv. de naam GrabbedComponent (doe dit door op de Hit Component-pin te klikken met de rechtermuisknop en te kiezen voor Promote to Variable).
- Gebruik deze variabele als invoer voor de Component-input van Grab Component at Location. De Location halen we bij de Hit Location.
- Voeg een Event Tick toe om het object vast te houden op de voorziene plek bepaald door GrabLocation waarvan we de WorldLocation toekennen aan de Target Location van de Physics Handle via de Set Target Location-node.
- Om de Actor te laten vallen, bij het loslaten van de rechtermuisknop, gebruikt u volgende Release Component-node vanuit de Physics Handle.
- De Custom Event Drop wordt dus:
- Omdat het vastgenomen object nogal veel bewoog heb ik de Angular Damping van de variabele GrabbedComponent tijdens het vasthouden verhoogd naar 100 (het mag ook wat minder zijn).
- De Angular Damping van de variabele GrabbedComponent wordt weer op 0 gezet bij het loslaten. Let op de Validatie Check om te zien of ik wel degelijk een GrabbedComponent heb, dit voorkomt een eventuele foutmelding.
- Omdat ik last heb van de rug kan ik geen objecten van boven de 500 kg opnemen. Ik integreer deze test in mijn code door te controleren via Get Mass.
Wijzig, in het Details-panel, de eigenschap MassinKg naar 501 en ik zal deze Actor niet meer kunnen vastnemen.
Onderstaande video toont een meer complexe en completere manier om objecten vast te nemen en in beweging te brengen. Deze methode wordt gebruikt in de meeste van de voorbeeldvideo’s van Lusiogenic.
Physics Constraint
- Start een nieuw Third Person Desktop/Console project van Maximum Quality With Starters Content en geef het een passende naam.
Physics Constraint Actor
Een Physics Constraint Actor laat u toe twee objecten aan mekaar te verbinden zodat de physics door het tweede object beperkt is door het eerste object. Denk aan een luster wiens beweging beperkt is door het platfond.
- Klik in het Modes-panel, zoek naar Physics Constraint Actor en sleep het in het level.
In de eigenschappen ziet u dat u 2 Constraint Actors kunt ingeven.
De eerste Constraint Actor 1 is het centrale (draai)punt.
De tweede Constraint Actor 2 is de bewegende Actor met Simulate Physics aangevinkt.
Indien u het centrale (draai)punt wilt verbergen moet u Hidden In Game aanvinken, net als de Collision uitschakelen.
Slinger
We gaan een slinger maken. De slinger, een Sphere hangt via een Cable aan een Cube. De beweging van de Sphere wordt beperkt door de Cube.
- Voeg een Cube toe en recht onder de Cube voegt u een Sphere toe. Plaats ze niet te hoog want u moet tegen de Sphere kunnen tegenlopen.
- Vink Simulate Physics voor de Sphere aan (niet voor de Cube, de Cube moet onbeweeglijk (Static) blijven hangen).
- Om het wat realistischer te maken voegen we een Cable toe. Plaats de bovenkant van de Cable in, of juist aan de onderkant van, de Cube.
- In het Detail-panel, onder Attach End To – Other Actor kiest u voor de Sphere. De andere eigenschappen mag je laten staan.
Als we nu het programma zouden opstarten zou de Sphere gewoon naar beneden vallen. Dit willen we niet, de Sphere moet als een slinger blijven hangen aan de Cube. Of anders gezegd, de beweging van de Sphere hangt vast aan, wordt bepaald door, de Cube.
- Het enige wat u hiervoor moet doen is een Physics Constraint Actor toevoegen. Plaats deze ongeveer halverwege de Sphere en de Cube.
- In het Detail-panel zet de volgende eigenschappen: Constraint Actor 1 is de Cube en Constraint Actor 2 is de Sphere (en niet omgekeerd).
Er zijn ook nog tal van andere, gevorderde eigenschappen (Linear Limits, Angular Limits, Linear Motor, Angular Motor,…) waarmee u kunt bepalen hoe de twee objecten zich ten opzichte van mekaar gedragen en waar u mee kunt experimenten.
- Druk op Play en als u tegen de Sphere loopt zal deze slingeren met de Cube als vast punt.
Physic Components
- U kunt Physics Componenten toevoegen aan een Blueprint Class.
Ik ga een paar voorbeelden uitwerken en al doende de instellingen voor de Physics Constraint verkennen.
Als u onderstaande voorbeelden wilt uitwerken maakt u telkens een nieuwe Blueprint Class aan met Actor als Parent.
Springplank
U hebt 3 componenten nodig:
- Een basis (Base) die als vast anker/draaipunt fungeert.
- Een plank (Board) die Physics simuleert.
- Een Physics Constraint ankerpunt.
- De Base, een Cube die geschaald is.
- De Board, een Cube die geschaald is. Vergeet niet Simulate Physics aan te vinken.
- Physic Constraint met de Base als Component 1 en de Board als Component 2.
- Vink Disable Collision aan zodat er geen Collison is tussen de Base en de Board.
Voor de Physics Constraint willen we de beweging van de Board beperken tot een gelimiteerde draaiende op– en neerbeweging.
- U doet dit door onder Angular Limits de Swing 2 Motion (op en neer) op Limited te zetten en de Swing 1 Motion (heen en weer) en de Twist Motion op locked te plaatsen.
- Vervolgens kunt u Swing Limits instellen door Soft Constraint aan te vinken en de Stiffness (bv. 1500) en Damping (bv. 50) in te stellen.
In plaats van Swing Limits kunt u ook de Angular Motor gebruiken.
- De Angular Drive Mode is Twist and Swing.
- Target Orientation is Swing met een Strength van bv. 1500 (zelfde als bovenstaande Stiffness).
- Target Orientation is Swing met een Strength van bv. 50 (zelfde als bovenstaande Damping).
Indien u wenst dat de springplank kan afbreken kunt u Angular Breakable aanvinken en een waarde (bv. 5000) ingeven voor de Angular Break Threshold.
Schommel
De schommel is erg gelijklopend met de springplank alleen staat uw Physics Constraint ankerpunt in het midden.
U hebt 3 componenten nodig:
- Een basis (Base) die als vast anker/draaipunt fungeert.
- Een plank (Board) die Physics simuleert.
- Een Physics Constraint ankerpunt.
- De Base, een Cone die geschaald is.
- De Board, een Cube die geschaald is. Vergeet niet Simulate Physics aan te vinken. Zet de Sleep Family op Sensitive, dit zorgt ervoor dat de schommel op een meer realistischer manier opnieuw zijn evenwicht zoekt.
- Physic Constraint met de Base als Component 1 en de Board als Component 2.
- Vink Disable Collision aan zodat er geen Collison is tussen de Base en de Board.
Voor de Physics Constraint willen we, net als bij de springplank, de beweging van de Board beperken tot een gelimiteerde draaiende op– en neerbeweging.
- U doet dit door onder Angular Limits de Swing 2 Motion (op en neer) op Limited te zetten en de Swing 1 Motion (heen en weer) en de Twist Motion op locked te plaatsen.
- U kunt de Swing Limits als volgt instellen.
- En u kunt de Angular Motor als volgt instellen.
Propeller
U hebt 3 componenten nodig:
-
- Een basis (Base) die als vast anker/draaipunt fungeert.
- Een propeller die Physics simuleert. Het is belangrijk dat het draaipunt Propeller Pivot samenvalt met de Center of Mass van de propeller.
- Een Physics Constraint ankerpunt dat zich ergens tussen de basis en de propeller bevindt (of samenvalt).
- De Base, een Cube die geschaald is.
- Voor de propeller heb ik een Cylinder gekozen, u kunt natuurlijk ook een “echte” propeller maken in bv. Blender. Vergeet niet Simulate Physics aan te vinken.
- Physic Constraint met de Base als Component 1 en de Propeller als Component 2.
- Vink Disable Collision aan zodat er geen Collison is tussen de Base en de Board.
Voor de Physics Constraint willen we een vrije draaiende beweging.
- U doet dit door onder Angular Limits de Swing 2 Motion (op en neer) op Free te zetten en de Swing 1 Motion (heen en weer) en de Twist Motion op locked te plaatsen.
- Voor de Angular Motor kiest u de Angular Drive Mode Twist and Swing, zet de Target Velocity op Swing en geef de gewenste Strength.
Onderstaande programmeercode zet de Center of Mass in het middelpunt van de propeller en toont hoe u een waarde, de Target Velocity kunt wijzigen.
Onderstaande video is een soort studie van de invloed van gewicht (Mass Ratio) op de physics.
Praktische videovoorbeelden
Nu we kennisgemaakt hebben met de basis verwijs ik u door naar onderstaande praktische videovoorbeelden voor specifieke voorbeelden en oplossingen, voor de liefhebbers.