Jag känner till några skillnader mellan Update() och FixedUpdate() och nyligen har jag använt båda funktionerna i ett skript. Koden fungerar, men jag har en fråga:

Ger det problem att använda båda dessa funktioner? Är det säkert att använda dem båda?

Svar

Uppdatera order

När du håller reda på spellogik och interaktioner, animationer, kamerapositioner etc. finns det några olika händelser du kan använda. Det vanliga mönstret är att utföra de flesta uppgifter i uppdateringsfunktionen, men det finns också andra funktioner du kan använda.

FixedUpdate:

FixadUpdate kallas ofta oftare än uppdatering.

Det kan anropas flera gånger per bild om bildfrekvensen är låg och det kanske inte alls kan kallas mellan bildrutorna om bildfrekvensen är hög. Alla fysikberäkningar och uppdateringar sker omedelbart efter FixedUpdate. När du använder rörelseberäkningar i FixedUpdate behöver du inte multiplicera dina värden med Time.deltaTime.

FixedUpdate kallas på en pålitlig timer, oberoende av bildhastighet

.

Uppdatering:

Uppdatering anropas en gång per ram. Det är den huvudsakliga arbetshästfunktionen för ramuppdateringar.

LateUpdate:

LateUpdate anropas en gång per ram efter att uppdateringen är klar.

Alla beräkningar som utförs i Update kommer att ha slutförts när LateUpdate börjar. En vanlig användning för LateUpdate är en följande tredjepersons kamera. Om du får din karaktär att röra sig och vända inuti Update kan du utföra alla kamerarörelser och rotationsberäkningar i LateUpdate. Detta kommer att säkerställa att karaktären har flyttat helt innan kameran spårar sin position.

Att använda Fixad Update, Update och Late Update är samtidigt säkert.

 using UnityEngine; using System.Collections; public class CheckFunctionExecutionOrder : MonoBehaviour { void FixedUpdate () { Debug.Log("FixedUpdate time :" + Time.deltaTime); } void Update () { Debug.Log("Update time :" + Time.deltaTime); } void LateUpdate() { Debug.Log("late Update time :" + Time.deltaTime); } } 

Kommentarer

  • Fantastiskt svar! Det kan vara värt att inkludera att du kan skapa en coroutine som väntar på FixedUpdate innan du kör; att starta denna coroutine från en startmetod effectivley ger dig en LateFixedUpdate (som, även om den inte är så användbar, har sina användningsområden).
  • Multiplicera med Time.deltaTime är fortfarande en bra idé i FixedUpdate. Det låter dig uttrycka saker som hastigheter i " enheter per sekund " istället för " enheter per bock " och om du ändrar din fasta tidssteg vann du ' t måste gå tillbaka och ställa om alla dina parametrar för att få samma hastigheter. Fördelen med FixedUpdate är att Time.deltaTime alltid returnerar den stabila fixedDeltaTime när den nås från FixedUpdate, snarare än att få ett variabelt resultat varje ram baserat på framrate och tidsskalning, som det gör i Update.

Svar

De körs faktiskt alla samtidigt, dina skript gör bara saker i dessa funktioner. Uppdatering anropas en gång per ram och FixedUpdate kallas en gång för varje ”fysikuppdatering” (som är en gång för varje fast tid som du kan justera).

Det finns också LateUpdate , om du vill att vissa funktioner ska köras efter Uppdateringsfunktionen för referensramen. För en fullständig lista över meddelanden, se MonoBehaviour .

Här ”är en länk till Enhetshandledning som täcker detta .

Kommentarer

  • Fysikuppdatering är kontrollerbar? Jag menar att om jag ställer in Fixed TimeStep till något värde kommer den fixade uppdateringen att köras efter den tiden? och spelfysiken kommer också att fungera efter den tiden?
  • @ MuhammadFaizanKhan Det borde vara så det fungerar. Jag ' är dock inte säker på den aktuella versionen av Unity, det var hur det var när jag skrev svaret. I grund och botten uppdateras uppdatering varje bildruta och fysik har sin egen bildhastighet och uppdateringsfunktion separat från den andra uppdateringsfunktionen.

Svar

Det är säkert att använda Update (), FixedUpdate () och LateUpdate () i ett skript. Jag har åtminstone gjort det och har aldrig haft några problem.Jag använder vanligtvis Update () för mina huvudslingor, FixedUpdate () för saker som fysik och LateUpdate () för loopar som jag vill utföra efter allt annat.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *