Sådan bruger du opdatering i Unity

Opdateringsfunktionen i Unity er en indbygget funktion, der kaldes én gang pr. frame og bruges almindeligvis til at opdatere tilstanden af ​​spilobjekter og udføre anden spillogik. Nedenfor er et par tips til, hvordan man korrekt bruger Update-funktionen i Unity-koden.

1. 'Time.deltaTime'

Da opdateringsfunktioner kaldes én gang pr. frame, er det vigtigt at bruge 'Time.deltaTime' for at sikre, at opdateringerne er billedhastighedsuafhængige. Dette betyder, at opdateringerne vil køre med samme hastighed uanset billedhastigheden, hvilket sikrer, at spillet opfører sig konsekvent på tværs af forskellig hardware.

For at flytte et objekt med konstant hastighed, skal bevægelsesvektoren for eksempel ganges med 'Time.deltaTime' for at sikre, at objektet bevæger sig med samme hastighed uanset billedhastigheden:

void Update() {
    transform.position += Vector3.forward * speed * Time.deltaTime;
}

2. Undgå dyre beregninger

Som nævnt tidligere, da opdateringen kaldes én gang pr. frame, er det vigtigt at undgå at udføre dyre beregninger, der kan påvirke ydeevnen. For eksempel, hvis der er en kompleks algoritme, der tager lang tid at udføre, kan det være bedre at flytte den til en separat tråd eller dele den op i mindre bidder, der kan udføres over flere frames.

3. Brug FixedUpdate til fysik

Når du arbejder med fysik i spillet, anbefales det at bruge FixedUpdate-funktionen i stedet for Update. FixedUpdate kaldes med en fast hastighed, som bestemmes af fysiktidstrinnet, og er designet til at håndtere fysikberegninger som kollisionsdetektion og rigid body-bevægelse. Brug af FixedUpdate til fysikberegninger kan hjælpe med at sikre, at spilfysikken opfører sig konsekvent og præcist på tværs af forskellige billedhastigheder.

4. Overvej at bruge Coroutines

For at udføre en opdatering, der ikke er bundet til billedhastigheden, kan det være bedre at bruge en Coroutine i stedet for en opdatering. Coroutines giver funktionaliteten til at pause udførelsen af ​​en funktion i et bestemt tidsrum, så den efterfølgende kan udføre tidsbaserede opdateringer som f.eks. at skabe fjender eller forsinke en animation.

IEnumerator SpawnEnemy() {
    while (true) {
        Instantiate(enemyPrefab, spawnPoint.position, Quaternion.identity);
        yield return new WaitForSeconds(spawnDelay);
    }
}

For at starte en Coroutine skal du blot ringe til StartCoroutine én gang, sådan her:

StartCoroutine(SpawnEnemy());

For at stoppe en Coroutine skal du bruge StopCoroutine-metoden, som tager en reference til en Coroutine, IEnumerator eller et metodenavn (at gemme en reference fra en StartCoroutine og bruge den til at stoppe er en foretrukken tilgang, da den ved nøjagtigt, hvilken instans af en Coroutine der skal stoppes ):

Coroutine a = StartCoroutine(SpawnEnemy());

StopCoroutine(a);

Konklusion

Hvis du følger disse bedste fremgangsmåder, sikres det, at opdateringsfunktionerne bruges korrekt i Unity scripts.