Kezdőoldal » Számítástechnika » Programozás » Unity floating point precision...

Unity floating point precision problémára miért nem ajánlja senki a következő megoldást?

Figyelt kérdés

Tételezzük fel, hogy a játék csak egyszemélyes játékmóddal rendelkezik, de valamilyen oknál fogva szükséges, hogy egyetlen jelenetből épüljön fel, viszont az ismert, címben is említett probléma, jelentkezik egy bizonyos távolságon túl (először csak remegés, majd teljes glitch), mivel a scene óriási helyet igényel, és bonyolultabbá tenné a több jelentre való felosztást.

Én azt gondolom, hogy legegyszerűbb létrehozni egy üres objektumot, pl. MasterObject néven, és az összes elemet ide belepakolni. Tehát minden maradna a régi a hierarchiában, kivéve, hogy a MasterObject az ős szülő, ami alapból tartalmazza a pozíciót, és ha ennek a pozícióját változtatjuk, akkor a benne lévő összes elemé is vele együtt változik. Tehát megszabunk bizonyos korlátokat a létező összes irányban (vagy legalább is olyan irányokban, ahol fizikailag lehetséges, hogy a játékos, és/vagy kamera eljuthat a kritikus távolságig), majd ellentétes irányba áthelyezzük a szülő objektum pozícióját.

Röviden, a jelenet és annak egyes részei mindig is belelógnának a kritikus pozíción túlra, csak éppen úgy lenne elcsúsztatva az egész, hogy ahol a játékos tartózkodik, az mindig a határértéken belül maradjon.

Én eddig csak összetettebb megoldásokat találtam erre, külön script, SceneManagement, for ciklussal végigmegy a scene összes elemén, de nem értem, miért nem lehet egyszerűen csak kihasználni a hierarchia előnyeit, vagyis az egymásba ágyazást. De lehet valahol említik is, csak én nem találtam még.



2022. szept. 6. 21:16
 1/3 anonim ***** válasza:

De a legfelső elem pozíciója a root parent ugyanúgy túl nagy értéket fog felvenni ha pedig azt nem mozgatod csak a childeket akkor megint ugyanott vagy mert akkor a childeknek lesz nagy pozíciója.


Az volna a legjobb ha a game engine ban lehetne módosítani azt ,hogy a tér egy adott pozíciója számítson origó pontnak.


Remélem nem írtam hülyeséget.

2022. szept. 7. 10:30
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

Igazad van, oltári nagy hülyeség, amit gondoltam. Látszik, hogy kezdő vagyok Unity -ben, meg úgy általában a 3D világában.

Szóval, fogalmam sem volt róla eddig, hogy ha egy objektumot beteszek egy szülőbe, és a szülőt mozgatom, akkor azzal nem fog arányosan változni a globális pozíciója a gyereknek. Vagyis pl. ha nekem a szülő X pozíciója 0 a gyereké meg -1, és ha a szülőt mozgatom X+1 -el, attól még a gyerek objektumé ugyanúgy -1 lesz. Én azzal voltam, hogy akkor a gyereké 0 lesz, vagyis arányosan növekedik, de ezek szerint a szülő origója számít a gyerek objektumoknál. Nem baj, ma is tanultam valamit, ki kellett volna előbb próbálnom, mielőtt kiírom a kérdést.

Így viszont logikus, hogy a Scene összes létező objektumát a megfelelő pillanatban össze kell gyűjteni, és egy for ciklussal mindegyiket áthelyezni a megfelelő helyre.

Valami nyomós oka kell legyen annak, hogy az Unity -ben ez mai napig probléma, és nem oldották meg Engine szinten, hogy nekünk ne kelljen foglalkozni vele.

2022. szept. 7. 20:31
 3/3 anonim ***** válasza:

Azzal is számolj, hogy onnantól a Transform.Position teljesen fals adatokkal fog számolni, ha a root object egy más komponense tartalmazza az "eltolást".


Tehát a root helyzete (position) 0,0,0 viszont ez csak a probléma megoldása miatt van, amúgy mondjuk 5000,0,0, akkor nem számolhatsz a sima positionnal, mivel ezt az 5000,0,0 adatot egy másik komponensnek kell tárolnia és számoltatnia a pozíciót. Nevezzük offset-nek az eltolást, szóval az offsetet mindig bele kell számolnod. Ez főleg akkor macerás, ha mondjuk UI-on akarsz olyan pozíciót jelezni ami nincs betöltve és van eltolás, ott matekolnod kell azzal, hogy a betöltött hely legtávolabbi pontjára rakja a jelzést, VISZONT a számot, hogy mondjuk 8000 méter, már a valós távolság alapján kell kiszámolni.

2022. nov. 18. 10:55
Hasznos számodra ez a válasz?

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!