Tudok néhány különbséget Update() és FixedUpdate() és a közelmúltban mindkét függvényt egy szkriptben használtam. A kód működik, de van egy kérdésem:

Mindkét funkció használata okoz-e problémát? Biztonságos mindkettőt használni?

Válasz

Rendelés frissítése

Ha nyomon követi a játék logikáját és az interakciókat, az animációkat, a kamera helyzetét stb., akkor néhány különböző eseményt használhat. A közös minta az, hogy a legtöbb feladatot az Update függvényben hajtják végre, de vannak más funkciók is, amelyeket használhat.

FixedUpdate:

A FixedUpdate-et gyakran gyakrabban hívják, mint az Update-et.

Képkockánként többször is meghívható, ha a képsebesség alacsony, és előfordulhat, hogy egyáltalán nem hívható meg a képkockák között, ha a képsebesség magas. Minden fizikai számítás és frissítés közvetlenül a FixedUpdate után történik. Amikor a FixedUpdate alkalmazásán belül mozgásszámításokat alkalmaz, nem kell szoroznia az értékeket a Time.deltaTime értékkel.

A FixedUpdate megbízható időzítőn van meghívva, függetlenül a képkockasebesség

.

Frissítés:

A frissítést kockánként egyszer kell meghívni. Ez a keretfrissítések fő munkalovas funkciója.

LateUpdate:

A LateUpdate kockánként egyszer meghívásra kerül, miután a frissítés befejeződött.

Az Update alkalmazásban végrehajtott számítások a LateUpdate kezdetekor befejeződnek. A LateUpdate általánosan használt eszköze egy harmadik személy fényképezőgépének használata. Ha mozgatja és megfordítja a karaktert az Update-en belül, akkor a LateUpdate alkalmazásban elvégezheti a kamera összes mozgásának és forgatásának számítását. Ez biztosítja, hogy a karakter teljesen elmozdult, mielőtt a kamera követi a helyzetét.

A Fix frissítés, a Frissítés és a Késői frissítés egyidejű használata biztonságos.

 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); } } 

Megjegyzések

  • Kiváló válasz! Érdemes lehet, hogy létrehozhat egy olyan korutint, amely a végrehajtás előtt megvárja a FixedUpdate-t; Ha a koroutint egy start módszerből indítja, az effektivley egy LateFixedUpdate-t kap (amely ugyan nem annyira hasznos, de felhasználható).
  • A FixedUpdate alkalmazásban még mindig jó ötlet a Time.deltaTime-szel való szorzás. Ez lehetővé teszi a sebességek " másodpercenként " kifejezését " egységek helyett pipánként " és ha megváltoztatja a rögzített időintervallumot, akkor ' nem kell visszamennie, és újra kell hangolnia az összes paramétert, hogy megkapja a azonos sebességgel. A FixedUpdate előnye, hogy a Time.deltaTime mindig visszaadja a stabil fixDeltaTime-et, amikor a FixedUpdate-ről érhető el, ahelyett, hogy minden képkockánként változó eredményt kapna a framerate és az időskálázás alapján, ahogy az Update-ben.

Válasz

Valójában mind egyszerre futnak, a szkriptjei csak ezeket a funkciókat látják el. A Frissítést képkockánként egyszer, a FixedUpdate programot minden “fizikai frissítésben” egyszer meghívják (ami egyszer minden rögzített időtartam, amelyet beállíthat).

Van még LateUpdate , ha azt szeretné, hogy bizonyos funkciók fussanak az adott referenciakeret frissítési funkciója. Az üzenetek teljes listáját lásd a MonoBehaviour referenciában.

Itt található a Unity bemutató, amely ezt lefedi .

Megjegyzések

  • A fizika frissítése vezérelhető? Úgy értem, ha a Fixed TimeStep értéket valamilyen értékre állítom, akkor a Fix Update ezen idő után fut? és a játékfizika is működni fog ennyi idő után?
  • @MuhammadFaizanKhan Így kell működnie. ' azonban nem vagyok biztos a Unity jelenlegi verziójában, de a válasz megírásakor ez volt a helyzet. Alapvetően a frissítés minden képkockán frissül, és a fizikának megvan a saját képkockasebessége és frissítési funkciója, külön a másik frissítési funkciótól.

Válasz

Biztonságos az Update (), a FixedUpdate () és a LateUpdate () egy parancsfájlban történő használata. Legalábbis nekem van, és soha nem voltak problémáim.A legfrissebb ciklusokhoz általában az Update () -t használom, a fizikai dolgokhoz a FixedUpdate () -t, a hurokhoz pedig a LateUpdate () -t, amelyet minden más után végre akarok hajtani.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük