Rigidbody och rörelse
↑Snabböversikt
Section titled “Snabböversikt”Rigidbody låter ett objekt delta i Unitys 3D-fysik. För 2D finns Rigidbody2D, med egna API:er och callbacks. Hur du flyttar ett objekt beror på om det är dynamiskt, kinematiskt eller saknar fysik.
| Uppgift | Vanligt val | Varför |
|---|---|---|
| Knuffa ett dynamiskt objekt | AddForce |
Fysiken beräknar accelerationen |
| Styr hastighet | Rigidbody-API för hastighet | Ger tydligare rörelsekontroll |
| Flytta ett kinematiskt objekt | MovePosition |
Samspelar med fysiksystemet |
| Flytta en dekoration | Transform |
Ingen fysisk simulering behövs |
Kodexempel
Section titled “Kodexempel”using UnityEngine;
[RequireComponent(typeof(Rigidbody))]public sealed class PushObject : MonoBehaviour{ [SerializeField] private float acceleration = 6f; private Rigidbody body;
private void Awake() => body = GetComponent<Rigidbody>(); private void FixedUpdate() => body.AddForce(Vector3.forward * acceleration, ForceMode.Acceleration);}ForceMode.Acceleration ger acceleration oberoende av massa. ForceMode.Force påverkas av massan och impulslägen används för snabba hastighetsförändringar.
Vanliga misstag
Section titled “Vanliga misstag”- Flytta inte ett dynamiskt Rigidbody med
transform.positionvarje bildruta och förvänta dig vanlig fysikreaktion. - Kör fysikkrafter i
FixedUpdateoch läs input viaUpdateeller actions. - Kontrollera rätt collider och collision layers.
- Använd interpolation om fysiksteg ger synligt ryckig rörelse.
Se livscykeln för varför tidpunkten spelar roll.
