IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jak zastavit obě kolidujíc rigidbody ? [Unity3D]

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Garrom Orc Shaman:28.9.2017 11:38

Zdravím. Dělám remake Battle City. Jak jistě víte v této hře pokud dva tanky kolidují tak se oba zastaví mezitím co v Unity3D se navzájem strkají. Zkoušel jsem nastavit mass hráče na 1 a mass nepřátel na 1000 ale pak nastává problém když se nepřátelské tanky strkají navzájem. Také jsem zkoušel vynulovat velocity při OnCollisionEnter ale to funguje jen první snímek kolize, zkoušel jsem to samé při OnCollisionStay ale pak se z kolize nemohu dostat protože oba kolidující tanky jsou imobilizované. Nezná někdo způsob jak zastavit oba kolidující tanky ?

-Garrom

Odpovědět
28.9.2017 11:38
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:28.9.2017 12:15

zkus použít místo OnCollisionEnter OnCollisionStay

 
Nahoru Odpovědět
28.9.2017 12:15
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:28.9.2017 12:55

Děkuji za reakci ale tato věta je v originální otázce.

Také jsem zkoušel vynulovat velocity při OnCollisionEnter ale to funguje jen první snímek kolize, zkoušel jsem to samé při OnCollisionStay ale pak se z kolize nemohu dostat protože oba kolidující tanky jsou imobilizované

...Také mně to napadlo......

Nahoru Odpovědět
28.9.2017 12:55
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:28.9.2017 13:37

á vidíš, úplně jsem to přehlédl, to se omlouvám, a co máš v plánu pokud se k sobě přiblíží ? zastavit je a změnit jim směr nebo je jen zastavit ? Ale co pak mají dělat ? Koukal jsem na videa a připadá mi, jako by se otočili náhodně jiným směrem a pokud je volno jedou dál. Zkus jim tam dát raycast a hlídat jestli raycast na něco narazí, pokud ano vynuť jim jiný směr jízdy.

 
Nahoru Odpovědět
28.9.2017 13:37
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:28.9.2017 15:12

Hlavní problém je kolize s hráčem ovšem tanky jsou spawnovány a občas do sebe vrazí. Normálně by nebyl problém kdykoliv změnit směr nebýt skutečnosti že tanky se pohybují ve smyčce kde svolí směr a pak urazí vzdálenost 6 jednotek a takhle pořád do kola. K detekci volného místa používám OverlapBox a raycast pro střelbu (ke zjištění zda je v linii střelby vhodný cíl). Napadlo mně použít rigidbody constraints tak že veškerý pohyb dám do metody. Před metodou uvolním rigidbody constraints a po metodě je zamknu takže tank vlastně bude statický pokud se nepohybuje.

Nahoru Odpovědět
28.9.2017 15:12
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Garrom Orc Shaman
D0ll0k:29.9.2017 7:47

Když teda jezdí za sebou ve smyčce, nestačilo by u tanku raycastem zjistit, jestli před ním nestojí další tank a pokud ano, počká cca půl vteřiny, tank před ním odjede a znovu se rozjede?

Nahoru Odpovědět
29.9.2017 7:47
Veni, vidi, programmato
Avatar
dez1nd
Člen
Avatar
Odpovídá na D0ll0k
dez1nd:29.9.2017 9:45

co když tanky pojedou naproti sobě ? oba se zastaví a budou čekat.

 
Nahoru Odpovědět
29.9.2017 9:45
Avatar
D0ll0k
Člen
Avatar
Odpovídá na dez1nd
D0ll0k:29.9.2017 10:16

Já jsem si to špatně přečetl :-( . Chápu tedy správně, že tanky nejezdí po kole, ale že se spawnou, zvolí směr, ujedou šest jednotek, znova zvolí směr a znova jedou šest jednotek a takhle pořád dokola. V tom případě to je stejné jako když tank narazí na překážku... tank pomocí raycastu zjistí, že má před sebou překážku => vyšlou se boční raycasty a můžou nastat čtyři možnosti:

  • Není volný ani jeden boční směr. Tank se otočí a jede zpět.
  • Je volný pouze jeden boční směr. Tank jede tímto směrem.
  • Volné obě strany. Náhodné zvolení směru.
  • Není volný ani jeden směr (tank přijel ke překážce a další ho zezadu zablokoval). V tom případě musí tank počkat do doby, dokud se neuvolní alespoň jeden směr.
Nahoru Odpovědět
29.9.2017 10:16
Veni, vidi, programmato
Avatar
Odpovídá na D0ll0k
Garrom Orc Shaman:29.9.2017 13:54

Docela jsi vystihl fungování mojí AI jen je tu pár odlišností.

  • Tanky neustále kontrolují překážky ve všech čtyřech směrech za použíti OverlapBox (viz. Unity3D Scripting API ) ne za použití raycast.
  • Tanky velice dobře vědí kde jsou překážky a nikdy se s nimi dobrovolně nesrazí jen výjimečně při spawnování ale to jsem již opravil.
  • Za všechny nehody může hráč. Tanky nikdy nevrazí do překážek nebo do sebe navzájem ale mohou být natlačeny do překážek nebo do svých kolegů.
  • Již jsem to vyřešil. Jelikož tanky nikdy dobrovolně nevrazí do ničeho není potřeba aby při pohybu kolidovaly s čímkoliv jiným než hráčem který se může připlést do cesty. Tanky mají zamčené rigidbody constraints takže hráč s nimi už hýbat nebude. Pohybuji s nimi pomoci posouvání jejich polohy namísto (momentálně nepotřebné) fyzické simulace.Rigidbody je momentálně používáno spíže na raycast a overlapBox než na fyzickou simulaci.
Nahoru Odpovědět
29.9.2017 13:54
Life for Code, Code for Life. I chose my path, I should stick on it.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.