Opdatering vs FixedUpdate

I Unity bruges både opdaterings- og FixedUpdate-funktionerne til at opdatere -adfærden af objekter i en scene, og selvom de tjener lignende formål, er der vigtige forskelle mellem de to.

'Update'

'Update'-funktionen kaldes én gang pr. frame og er ideel til håndtering af input, opdatering af objekt positioner og udførelse af de fleste generelle opgaver. Den er ikke billedhastighedsafhængig, hvilket betyder, at den kan variere i udførelsestid afhængigt af ydelsen.

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 vandrette og lodrette akse og bruger det til at styre objektets bevægelse. Metoden 'Translate' bruges til at flytte objektet i den angivne retning med konstant hastighed. Generelle opgaver kan også udføres inden for funktionen 'Update'.

'FixedUpdate'

Funktionen 'FixedUpdate' kaldes med faste tidsintervaller, hvilket gør den velegnet til at håndtere fysikrelaterede beregninger. Den er billedhastighedsuafhængig og sikrer ensartet adfærd på tværs af forskellige enheder og billedhastigheder.

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 fremadgående retning. Brugen af ​​'FixedUpdate' sikrer, at fysikberegningerne sker med en fast hastighed, uanset billedhastigheden. Dette er vigtigt for at opretholde stabil fysiksimulering.

'Update' vs 'FixedUpdate'

Nøgleforskelle mellem funktionerne 'Update' og 'FixedUpdate':

  • 'Update' kaldes én gang pr. frame, mens FixedUpdate kaldes med faste tidsintervaller.
  • 'Update' er billedhastighedsafhængig, mens FixedUpdate er billedhastighedsuafhængig.
  • 'Update' er velegnet til de fleste generelle opgaver, herunder inputhåndtering, objektbevægelse og ikke-fysikrelaterede operationer.
  • FixedUpdate er specielt designet til fysik-relaterede beregninger, såsom påføring af kræfter, justering af Rigidbody-egenskaber og udførelse af andre fysikbaserede operationer.

Konklusion

Det er vigtigt at bemærke, at 'Update' og 'FixedUpdate' kan eksistere side om side i det samme script, hvilket gør det muligt at adskille fysikrelateret kode fra anden generel kode. Forståelse af forskellene og brug af den passende funktion i hver sammenhæng hjælper med at sikre jævn og konsistent adfærd i Unity-projekterne.

Foreslåede artikler
Guide til MonoBehaviour in Unity
Brug af Runtime Animator Controller i Unity
Enhedsliste over nyttige søgeord i C#
Implementering af tastatur og mus input i Unity
Forstå funktioner og metodekald
Introduktion til Unity C# Scripting Language
Oprettelse af betingede erklæringer (hvis-andet) i Unity Code