Tiedän eroja Update() ja FixedUpdate() ja viime aikoina olen käyttänyt molempia toimintoja yhdessä komentosarjassa. Koodi toimii, mutta minulla on kysymys:

Aikooko näiden molempien toimintojen käyttäminen aiheuttaa ongelmia? Onko molempien käyttö turvallista?

Vastaa

Päivitä tilaus

Kun seuraat pelilogiikkaa ja vuorovaikutusta, animaatioita, kameran sijaintia jne., voit käyttää muutamia erilaisia tapahtumia. Yleinen malli on suorittaa useimmat päivitystoiminnon tehtävät, mutta voit käyttää myös muita toimintoja.

FixedUpdate:

FixedUpdate -ohjelmaa kutsutaan usein useammin kuin Päivitä.

Sitä voidaan kutsua useita kertoja kehystä kohden, jos kuvataajuus on pieni, eikä sitä voida kutsua lainkaan kehysten välillä, jos kuvataajuus on suuri. Kaikki fysiikan laskelmat ja päivitykset tapahtuvat heti FixedUpdate-ohjelman jälkeen. Kun sovellat liikelaskelmia FixedUpdate-sovelluksen sisällä, sinun ei tarvitse kertoa arvoja Time.deltaTimella.

FixedUpdate kutsutaan luotettavalla ajastimella, riippumatta kuvataajuus

.

Päivitys:

Päivitystä kutsutaan kerran kehystä kohti. Se on kehyspäivitysten tärkein työhevostoiminto.

LateUpdate:

LateUpdate kutsutaan kerran kehystä kohti, kun päivitys on valmis.

Kaikki päivityksessä suoritetut laskelmat valmistuvat, kun LateUpdate alkaa. LateUpdaten yleinen käyttö olisi seuraava kolmannen henkilön kamera. Jos panet hahmosi liikkumaan ja kääntymään päivityksen sisällä, voit suorittaa kaikki kameran liike- ja kiertolaskelmat LateUpdate-ohjelmassa. Tämä varmistaa, että merkki on siirtynyt kokonaan ennen kuin kamera seuraa sijaintiaan.

Kiinteän päivityksen, päivityksen ja myöhäisen päivityksen käyttö samanaikaisesti on turvallista.

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

Kommentit

  • Erinomainen vastaus! Saattaa olla syytä sisällyttää, että voit luoda korutiinin, joka odottaa FixedUpdate-ohjelmaa ennen suorittamista; Tämän korutiinin aloittaminen aloitusmenetelmällä effectivley antaa sinulle LateFixedUpdate (jolla ei ole niin hyödyllistä, mutta sillä on käyttötarkoituksiaan).
  • Kertominen Time.deltaTimella on silti hyvä idea FixedUpdatessa. Sen avulla voit ilmaista esimerkiksi nopeuksia " yksikköinä sekunnissa " " -yksikköjen sijaan kutakin rasti kohti " ja jos muutat kiinteää aikavaihetta, voitit ' ei tarvitse palata takaisin ja virittää kaikki parametrit saadaksesi samoilla nopeuksilla. FixedUpdate-sovelluksen etuna on, että Time.deltaTime palauttaa aina vakaan kiinteän kiinteän DeltaTime-ajan, kun sitä käytetään FixedUpdate-ohjelmasta, sen sijaan, että se saisi muuttuvan tuloksen jokaisesta kehyksestä, joka perustuu kehysnopeuteen ja ajan skaalaukseen, samalla tavalla kuin se päivityksessä. / div>

    vastaus

    Ne ovat kaikki käynnissä samanaikaisesti, skriptisi vain tekevät tavaraa näihin toimintoihin. Päivitys kutsutaan kerran kehystä kohti ja FixedUpdate kutsutaan kerran jokaiseen ”fysiikan päivitykseen” (joka on kerran kiinteässä ajassa, jota voit säätää).

    Siellä on myös LateUpdate , jos haluat tiettyjen toimintojen suorittamisen jälkeen kyseisen viitekehyksen päivitystoiminto. Täydellinen luettelo viesteistä on MonoBehaviour -viitteessä.

    Täällä on linkki Tätä kattava Unity-opetusohjelma .

    Kommentit

    • Fysiikan päivitys on hallittavissa? Tarkoitan, jos asetan Fixed TimeStep -arvoon jonkin arvon, kiinteä päivitys suoritetaan sen jälkeen? ja pelifysiikka toimii myös tuon ajan kuluttua?
    • @MuhammadFaizanKhan Sen pitäisi olla niin. En ' ole kuitenkaan varma Unityn nykyisessä versiossa, se oli kuinka kirjoitin vastauksen. Periaatteessa päivitys päivitetään joka kehyksellä ja fysiikalla on oma kehysnopeus ja päivitystoiminto erillään muista päivitystoiminnoista.

    Vastaa

    Päivitä (), FixedUpdate () ja LateUpdate () on turvallista käyttää yhdessä komentosarjassa. Ainakin minulla ei ole mitään ongelmia.Käytän yleensä Update (): tä pääsilmukkoihini, FixedUpdate (): tä esimerkiksi fysiikkaan ja LateUpdate (: ta) silmukoihin, jotka haluan suorittaa kaiken muun jälkeen.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *