Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 25. březen 2014, 15:58:26 Předmět: Neřešitelné úlohy v unity 3D |
|
|
Jedno dne jsem si řekl, že budu moderní a začnu používat Unity. Hlavně kvůli práci, protože se dá sehnat dost zakázek, kde je to podmínkou. Už ho používám přes rok. Občas to jde, ale často se taky chytám za hlavu a říkám si "PROČ PROČ!!!!????". Pak se kouknu na unity fórum a zjistím, že na můj dotaz neexistuje odpověď. A to třeba v několika vláknech. Ani dokumentace nepomůže - je sice hezky zpracovaná, ale nezjistíte, co ta či ona funkce vlastně dělá. Někdy nezjistíte ani jednotky, nebo koordinační systém.
Tak po krátké diskuzi v tomto vlákně s podporou několika místních uživatelů, zakládám vlákno, které nemá být cílený hating, ale protiváha dnešního glorifikování tohoto enginu. Nebo také souhrn zkušeností negativnějšího typu z cca ročního používání Free i PRO verze (těch pozitivních zkušeností je plný internet :) ). Jo a neberte to tak moc vážně, je to popelnicové téma! :-)
Nuže:
Taková pěkná neřešitelná úloha v Unity3D je: "Zjištění kolize objektu s ostatními objekty".
Ano, je to divné, ale je to tak. Jsou situace, kdy potřebujete (třeba v herní logice) zjistit, jestli nějaký objekt nekoliduje s jiným. Třeba při respawnu, nebo při volbě vhodné animace charactera, atd. Stačilo by něco jako "Unity.Collision.Check(object)". Ale nic podobného nenajdete. Nabízí se SweepTest. Ten je ale tak nějak k ničemu, protože nefunguje. Asi parameter distance má být nenulový? Nevím, dokumentace mlčí. Nabízí se také Physics.CheckSphere a Physics.CheckCapsule. Proč ale proboha definuju na objektech ty collidery, když stejně skončím u koule? Je to škoda.
Jsem docela zvědav na vaše zkušnosti.
Možná mi něco uniká, dostanu odpověď jedním odkazem a stanu se tak na pár dní kašpárkem ceskych-her :-) . Ale jdu do toho :-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 25. březen 2014, 16:18:33 Předmět: |
|
|
A nestacilo by si pri kazdej kolizii poznamenat, ze nastala a ked skonci, tak to zo zoznamu odmazat? Ja som s tym robil len par dni a nie velmi intenzivne, ale co si tak pamatam, tak rozumne callbacky sa mi volali pri zaciatku kolizie (Collider.OnCollisionEnter) aj "opusteni" kolizie (OnCollisionExit). _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
McMagic
Založen: 06. 08. 2012 Příspěvky: 615
|
Zaslal: 25. březen 2014, 16:22:53 Předmět: |
|
|
A jde o objekty co mají rigidbody nebo jen o čisté collidery?
Trigger na mesh collideru ti to nevyřeší?
Já ho používám na AI atd. kdy collider jako trigger reaguje na okolní objekty dle potřeby a vzdálenosti.
Možná píšu úplně z cesty;) Pracuji s Unity chvilku... _________________
http://www.mcmagic-productions.com/ |
|
Návrat nahoru |
|
 |
Adam.Streck

Založen: 19. 08. 2011 Příspěvky: 26
|
Zaslal: 25. březen 2014, 16:23:24 Předmět: |
|
|
Myslim ze explicitni dotazovani funkce skutecne neni, ale callback OnCollisionStay by mohl pomoct. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 25. březen 2014, 16:28:26 Předmět: |
|
|
OnCollisionStay se volá každý frame. Já chci ale odpověď hned, ne čekat další frejm, pak ho posunout kousek vedle a zase čekat. Ano. Mohl bych to dělat s neviditelným objektem a pak teprv udělat třeba ten respawn. Ale to je nepěkný workaround.
OnCollisionEnter jsem zkoušel, něco to dělalo, ale tuším, že taky se zpožděním. Udělám další pokus.
McMagic: jo, všechno jsou to triggery. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 25. březen 2014, 16:39:00 Předmět: |
|
|
Pokus: jak říkám, OnCollisionEnter (respektive OnTriggerEnter) se nezavolá hned. Až po čase. Někdy až po dvou framech. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
DespeRadoX

Založen: 28. 07. 2007 Příspěvky: 520
|
Zaslal: 25. březen 2014, 21:08:21 Předmět: |
|
|
oncollisionenter sa vola castejsie ak si v timemanageri nastavis fixed timestep a maximum allowed na nizsie cisla (podla potreby)...my sme to s memom riesili ked nam v Deathmetal gulicka koli velkej rychlosti neskolidovala so stenou (proste dalsi frame uz bola na druhej strane) _________________ http://www.touchgames.eu/
http://playito.com
TW: @Despo100
Space Merchants Online ...zruseny, pracujem na mobilnej verzii space merchantu |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 26. březen 2014, 20:48:51 Předmět: Re: Neřešitelné úlohy v unity 3D |
|
|
]semo[ napsal: |
zakládám vlákno, které nemá být cílený hating, ale protiváha dnešního glorifikování tohoto enginu |
A on někdo Unity snad glorifikuje tady na CH? Nebo se s tím setkáváš běžně někde jinde? U normálních vývojářů jsem nic takového nezaznamenal (ti řeší na fórech pragmaticky bugy, kterých je stále požehnaně) a výkřiky typu "nedělám v unity, protože ho každý chválí" apod. beru jen jako nesmyslný kolorit... |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. březen 2014, 08:28:26 Předmět: Re: Neřešitelné úlohy v unity 3D |
|
|
No, setkávám. Mám kolegu, který se nad tim tak moc rozplývá, že byste nevěřili. A přitom takovej chytrej a úspěšnej vývojář. A jeden můj zadavatel to stejný. Jsou s tim jak prdlí. No a tady se taky občas někdo najde, ale nebudu jmenovat, stejně je to fuk:-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 27. březen 2014, 10:41:19 Předmět: |
|
|
Jj, je to fuk, takže tu několikrát píšeš, jak děláš protipól, a že to není snaha o hejt, a smajlík sem a smajlík tam. Buď to řeknu na férovku a ukážu prstem, nebo neříkám, že to je fuk, no ni? . Já právě na CH zatím viděl jen odsudky toho, že si někdo vůbec dovolí s Unity špinit ruce, když je u toho takový hype. A chudáci pragmatici, aby šli kopat kanály nebo nevím  |
|
Návrat nahoru |
|
 |
pcmaster

Založen: 28. 07. 2007 Příspěvky: 1827
|
Zaslal: 27. březen 2014, 12:21:17 Předmět: |
|
|
Aby sme sa vratili k teme, funguje ti to uz, Semo, podla toho, co napisal Rado?
Podla mna hate nie je na mieste. Tento engine tu je, da sa na nieco pouzit, na nieco ine zase nie a nech sa s tym kazdy vysporiada ako vie, forum je od toho, aby sme si prave v takychto pripadoch skusili pomoct, nie?  _________________ Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. březen 2014, 13:26:55 Předmět: |
|
|
pcmaster napsal: |
Aby sme sa vratili k teme, funguje ti to uz, Semo, podla toho, co Rado? |
Ne, to neni řešení. Je tam opět čekání na příští, nebo jiný frame. Tohle nemá v unity řešení, tak ho ani nehledám. Smajlík sem, smajlík tam... _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 27. březen 2014, 14:07:40 Předmět: |
|
|
]semo[ napsal: |
Ne, to neni řešení. Je tam opět čekání na příští, nebo jiný frame. Tohle nemá v unity řešení, tak ho ani nehledám. Smajlík sem, smajlík tam... |
A to se bavíš opravdu o fyzikálním frame a ne vykreslovacím? Jak sis ten krok nastavil? (Nejde mi do hlavy, že bys nedostal kolizi hned v následujícím framu) |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. březen 2014, 14:36:14 Předmět: |
|
|
Chápej, nechci to v dalším frame. Ani fyzikálním, ani grafickým. Chci prostě funkci, která to checkne a vrátí mi výsledek bez čekání. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 27. březen 2014, 16:38:16 Předmět: |
|
|
Třeba je tak Unity stavěný, že počítá fyziku jako celek najednou. Vem si, že spousta méně zkušených skriptařů je schopna napsat:
kód: |
if (objekt1->kolize(objekt2)) { ... }
...
if (objekt1->kolize(objekt2)) { ... }
... |
Namísto:
kód: |
bool jeKolize = objekt1->kolize(objekt2);
if (jeKolize) { ... }
...
if (jeKolize) { ... }
... |
Takhle vynutili, že to pojede maximálně efektivně - za cenu omezení pro zkušené programátory, co vědí, co dělaji. _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
|