Hoppa till innehåll

Unitys livscykel

↑

Unity anropar vissa metoder på MonoBehaviour vid särskilda tillfällen. Att lägga kod i rätt fas gör skillnad för fysik, inmatning och initialisering.

Metod Vanlig uppgift Att tänka på
Awake Hämta komponenter, sätt lokalt tillstånd Körs när skriptinstansen laddas eller aktiveras beroende på sammanhang
OnEnable Prenumerera på händelser Kan köras flera gånger
Start Initiera beroenden Körs före första Update för ett aktivt beteende
Update Läs inmatning och vanlig spellogik Körs per renderad bildruta
FixedUpdate Påverka fysik Körs med fast tidssteg
LateUpdate Följ kamera eller kod efter Update Körs efter Update
OnDisable Avregistrera händelser Viktigt för att undvika dubbla prenumerationer
  1. Hämta Rigidbody i Awake.
  2. Läs indata i Update och spara aktuell riktning.
  3. Applicera krafter i FixedUpdate med den sparade riktningen.
  4. Låt kameran följa spelaren i LateUpdate.
  5. Avsluta prenumerationer i OnDisable.
Unity C# | PlayerMovement.cs
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public sealed class PlayerMovement : MonoBehaviour
{
private Rigidbody body;
private Vector2 movement;
private void Awake() => body = GetComponent<Rigidbody>();
private void Update() => movement = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
private void FixedUpdate() => body.AddForce(new Vector3(movement.x, 0f, movement.y) * 8f, ForceMode.Acceleration);
}

Exemplet använder Unitys äldre Input Manager för tydlighet. I ett projekt med Input System använder du actions för inmatning i stället.

Varför skilja på Update och FixedUpdate?

Section titled “Varför skilja på Update och FixedUpdate?”

Fysiken tar steg med fast tidsintervall, som inte måste sammanfalla med renderade bildrutor. Därför kan FixedUpdate köras noll eller flera gånger per bildruta. Läs snabba inmatningshändelser i Update och skicka värden vidare till fysiken.

Läs också Rigidbody och Kollisioner och triggers.

INTERAKTIV LIVSCYKEL

Välj en metod för att se när och varför den används. Schemat är förenklat; det visar inte en strikt total ordning mellan FixedUpdate och Update.

Awake

Initiera egna fält och spara referenser som tillhör komponenten.

Varför det spelar roll

Awake passar för lokal initiering, inte antaganden om ordningen mellan olika GameObjects.