Oppdatering vs FixedUpdate

I Unity brukes både oppdaterings- og FixedUpdate-funksjonene til å oppdatere atferden til objekter i en scene, og selv om de tjener lignende formål, er det viktige forskjeller mellom de to.

'Update'

'Update'-funksjonen kalles én gang per bilde og er ideell for å håndtere input, oppdatere objekt posisjoner og utføre de fleste generelle oppgaver. Den er ikke avhengig av bildefrekvens, noe som betyr at den kan variere i utførelsestid avhengig av ytelsen.

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 eksemplet ovenfor henter vi input fra den horisontale og vertikale aksen og bruker den til å kontrollere objektets bevegelse. Metoden 'Translate' brukes til å flytte objektet i den angitte retningen med konstant hastighet. Generelle oppgaver kan også utføres innenfor funksjonen 'Update'.

'FixedUpdate'

Funksjonen 'FixedUpdate' kalles opp med faste tidsintervaller, noe som gjør den egnet for å håndtere fysikkrelaterte beregninger. Den er uavhengig av bildefrekvens, og sikrer konsistent oppførsel på tvers av forskjellige enheter og bildefrekvenser.

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

I eksemplet ovenfor påfører vi en konstant kraft på en Rigidbody-komponent i objektets foroverretning. Bruken av 'FixedUpdate' sikrer at fysikkberegningene skjer med en fast hastighet, uavhengig av bildefrekvensen. Dette er viktig for å opprettholde stabil fysikksimulering.

'Update' vs 'FixedUpdate'

Viktige forskjeller mellom funksjonene 'Update' og 'FixedUpdate':

  • 'Update' kalles en gang per bilde, mens FixedUpdate kalles med faste tidsintervaller.
  • 'Update' er bildefrekvensavhengig, mens FixedUpdate er bildehastighetsuavhengig.
  • 'Update' er egnet for de fleste generelle oppgaver, inkludert inputhåndtering, objektbevegelse og ikke-fysikkrelaterte operasjoner.
  • FixedUpdate er spesielt utviklet for fysikkrelaterte beregninger, som å bruke krefter, justere Rigidbody-egenskaper og utføre andre fysikkbaserte operasjoner.

Konklusjon

Det er viktig å merke seg at 'Update' og 'FixedUpdate' kan eksistere side om side i samme skript, noe som gjør det mulig å skille fysikkrelatert kode fra annen generell kode. Å forstå forskjellene og bruke den riktige funksjonen i hver kontekst bidrar til å sikre jevn og konsistent oppførsel i Unity-prosjektene.

Foreslåtte artikler
Guide til MonoBehaviour in Unity
Introduksjon til Unity C# Scripting Language
Bruker Runtime Animator Controller i Unity
Enhetsliste over nyttige søkeord i C#
Implementering av tastatur- og musinngang i Unity
Forstå funksjoner og metodeanrop
Opprette betingede erklæringer (hvis annet) i Unity Code