Kezdőoldal » Számítástechnika » Programozás » Unityben minek a fixedupdate...

Unityben minek a fixedupdate ha updateban is tudok olyan kódot írni ami fix időnként fut le?

Figyelt kérdés

úgy hogy időzítem. pl:

float perTime = 0.2;

float nextTime = Time.time + perTime;

void Update() {

....if(Time.time >= nextTime)

....{

........// Valami pl rb.AddForce

........nextTime = Time.time + perTime;

....}

}


2016. júl. 1. 00:21
1 2
 1/11 A kérdező kommentje:

Valami mélyebb oka kell,hogy legyen ennek a dolognak mert még azokban az esetekben is a fixedUpdate-ot javasolják ahol nem folyamatosan akarok lefuttatni valami fizika kódot pl ebben az esetben:

if(Input.GetKeyDown(KeyCode.Space))

....rb.AddForce(Vevtor2.up * force);

2016. júl. 1. 00:25
 2/11 A kérdező kommentje:
De így ha pont akkor nyomom le a space gombot amikor nem a fixedUpdate a soros pl 0.2 és 0.4 között akkor nem történne semmi. Persza ha a timestep 0.2 re van állítva ez a default.
2016. júl. 1. 00:28
 3/11 anonim ***** válasza:

Az Update() olyan gyorsan hívódik meg amilyen gyorsan csak tud, a FixedUpdate() pedig fix időközönként. Azért kell fizikánál FixedUpdate() et használni, mert a Physx fix rendszerességgel frissül függetlenül attól, hogy az Update() ben futtatott kód végzett-e. Ha 2 fps ed van akkor is lefut a FixedUpdate() az előre megadott időközönként, meg ha 90 akkor is - ezért Fixed, nem próbál minél többet minél gyorsabban.


A kód amit írtál nem fix idő után futna le, ha tovább tart az Update() végére érni mint a Time.time + nextTime, akkor már elcsúsztál.


Az Input minden leütést regisztrál, írhatod bármelyikben, nem fog elveszni az adat.


Ezen felül még annyi, hogy ha feltétlen vágyad Update() ben írni mindent, akkor megteheted, de ahhoz hogy pontos legyen Time.deltaTime helyett Time.fixedDeltaTime ot kell használnod - ha FixedUpdate() ben hívod meg, akkor használhatod a Time.deltaTime ot is, ugyanannyit fog visszaadni mint a Time.fixedDeltaTime.

2016. júl. 1. 13:42
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:

Én nem tudom, hogy a billentyűleütéssel mi a helyzet, de gondolom erre való a fixedUpdate:


Mondjuk van egy gravitációs motorod, amiben Euler integrátort használsz (pföjj), és szeretnéd időnként updatelni. Ha sima updatet használsz, lehet, hogy a lassú géped miatt beletelik 2 másodpercbe, míg kap egy olyat (fél fps-ed van), és akkor neked kell megoldani, hogy megfelelő felbontással futtassa az updateket a fizikai motoron, pl. 2 másodpercet elosztod 10ms-al, és akkor kijön, hogy jó, kaptál egy updatet, most lefuttatod a motor valódi update-jét 200-szor.


Ehelyett beregisztrálhatsz egy FixedUpdatet, és megcsinálja helyetted.

(nem unityzok, tehát nem tudom, de csak ez kéne, hogy legyen)

2016. júl. 1. 13:45
Hasznos számodra ez a válasz?
 5/11 A kérdező kommentje:

Értem de mivel azzal a fizika kóddal amit nem fix rendszerességgel szeretnék futtatni hanem csak akkor ha lenyomom a space gombot? És mi a helyzet azzal a verzióval amit akkor akarok lefutni folyamatosan ha ezt nyomva tartom.


Melyiket a fixedbe és miért?

2016. júl. 1. 14:44
 6/11 anonim ***** válasza:

A lenyomásra az azt jelenti, hogy a következő update-nél. Az, hogy melyik, azt most már te döntöd el (de ha megértetted, amit írtunk, akkor nem lesz nehéz).


Az, hogy valamit lenyomva tartasz, az gondolom vizsgálható az updaten belül. Így meg ki van egyszerűsívte az egészből az input.

2016. júl. 1. 16:00
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

#5

Pontosan ugyanúgy működik az Update() és a FixedUpdate() is, ha azt mondod, hogy if(Input.GetKeyDown(Keycode.Space)) vagy if(Input.GetKey(Keycode.Space)), akkor azt csak akkor fogja meghívni ha lenyomtad/nyomva tartod a gombot, nem fogja folyamatosan hívni minden alkalommal amikor lefut a FixedUpdate(). Az egyetlen különbség, hogy míg az Update() olyan gyorsan pörög amilyen gyorsan csak tud, addig a FixedUpdate() az előre megadott intervallumonként.

2016. júl. 1. 19:11
Hasznos számodra ez a válasz?
 8/11 A kérdező kommentje:
Még mindig nem értem. 😢 Csak azt,hogy a fixedUpdate fix időközönként az update pedig amennyiszer csak lehetséges. De nem làtom,értem a külömbségükben az okot még mindig,hogy miért is fontos valamit a fixed be írni. Úgy értem,hogy annak tudata,hogy tudom egyik fix időnként míg a màsik amennyiszer csak tud nem teszi szàmomra érthetővé azt,hogy miért fontos az,hogy létezzen egy olyan update ami fix időnként fut le.
2016. júl. 1. 20:50
 9/11 A kérdező kommentje:

"Azért kell fizikánál FixedUpdate() ot használni, mert a Physx fix rendszerességgel frissül függetlenül attól, hogy az Update() ben futtatott kód végzett-e"


Nem értem ebből miért fontos,hogy hasznàljam a fixed verziót. Csak mert a fizika fix rendszerességgel frissül de ez miért ok rà?

2016. júl. 1. 20:55
 10/11 anonim ***** válasza:

Mert FixedUpdate() et akkor érdemes használni ha fizikával dolgozol - ahogy a példádban említett AddForce() esetében. Ez az egyetlen oka annak hogy létezik.


Ahogy írtam korábban csak annyi a különbség, hogy szinkronban van a fizikával, emiatt nem kell feleslegesen bonyolítanod a kódodat azzal, hogy ellenőrizd, hogy a fizika számítás megvolt-e már. Ha nincs köze a fizikához annak amit csinálsz nem kell FixedUpdate() et használnod egyáltalán - illetve akkor sem kell ha fizikát használsz, csak érdemes, mert sokkal egyszerűbb lesz az életed(meg gyorsabb a kódod, nem kell elvégezned még egyszer azokat az ellenőrzéseket amiket a Unity már elvégzett helyetted).


Megjegyzem van még LateUpdate() is, a többiről nem is szólva. Itt találsz leírást mindegyikhez:

[link]

2016. júl. 1. 21:45
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!