Uppdatering vs FixedUpdate

I Unity används både uppdaterings- och FixedUpdate-funktionerna för att uppdatera beteendet för objekt i en scen, och medan de tjänar liknande syften, det finns viktiga skillnader mellan de två.

'Update'

Funktionen 'Update' anropas en gång per bildruta och är idealisk för hantering av indata, uppdatering av objekts positioner och utför de flesta allmänna uppgifter. Den är inte beroende av bildhastighet, vilket innebär att den kan variera i körningstid beroende på prestanda.

void Update()
{
    // Input handling
    float horizontalInput = Input.GetAxis("Horizontal");
    float verticalInput = Input.GetAxis("Vertical");
    
    // Movement
    Vector3 movement = new Vector3(horizontalInput, 0, verticalInput);
    transform.Translate(movement * speed * Time.deltaTime);
    
    // General-purpose tasks
    // ...
}

I exemplet ovan hämtar vi input från de horisontella och vertikala axlarna och använder den för att styra objektets rörelse. Metoden 'Translate' används för att flytta objektet i angiven riktning med konstant hastighet. Allmänna uppgifter kan också utföras inom funktionen 'Update'.

'FixedUpdate'

Funktionen 'FixedUpdate' anropas med fasta tidsintervall, vilket gör den lämplig för att hantera fysikrelaterade beräkningar. Den är oberoende av bildfrekvens, vilket säkerställer konsekvent beteende över olika enheter och bildfrekvenser.

void FixedUpdate()
{
    // Physics calculations
    rb.AddForce(transform.forward * forceMagnitude);
    
    // Other physics-related tasks
    // ...
}

I exemplet ovan applicerar vi en konstant kraft på en Rigidbody-komponent i objektets framåtriktning. Användningen av 'FixedUpdate' säkerställer att fysikberäkningarna sker med en fast hastighet, oavsett bildhastighet. Detta är viktigt för att upprätthålla stabil fysiksimulering.

'Update' mot 'FixedUpdate'

Viktiga skillnader mellan funktionerna 'Update' och 'FixedUpdate':

  • 'Update' anropas en gång per bildruta, medan FixedUpdate anropas med fasta tidsintervall.
  • 'Update' är bildhastighetsberoende, medan FixedUpdate är bildhastighetsoberoende.
  • 'Update' är lämplig för de flesta allmänna uppgifter, inklusive inmatningshantering, objektrörelse och icke-fysikrelaterade operationer.
  • FixedUpdate är speciellt utformad för fysikrelaterade beräkningar, som att applicera krafter, justera Rigidbody-egenskaper och utföra andra fysikbaserade operationer.

Slutsats

Det är viktigt att notera att 'Update' och 'FixedUpdate' kan samexistera i samma skript, vilket gör det möjligt att separera fysik- relaterad kod från annan allmän kod. Att förstå skillnaderna och använda lämplig funktion i varje sammanhang hjälper till att säkerställa smidigt och konsekvent beteende i Unity-projekten.

Föreslagna artiklar
Guide till MonoBehaviour in Unity
Introduktion till Unity C# Scripting Language
Använder Runtime Animator Controller i Unity
Enhetslista med användbara sökord i C#
Implementering av tangentbords- och musingång i Unity
Förstå funktioner och metodanrop
Skapa villkorliga uttalanden (om annat) i Unity Code