Jak dobrze ogarnąć prędkość pocisków z kolizją przeciwnika. Osobny wątek?


#1

Cześć, buduje sobie prosty shooter. Ruch obiektów jest napisany bardzo surowo, np. prędkość chodzenia postaci czy przeciwnika to po prostu x+=speed gdzie speed to 4. Przy takiej “prędkości” program nie ma problemu by ogarnąć kolizje. Problem zaczął się gdy strzelam z broni. Załóżmy przemieszczanie pocisku to: x+=100. I tu oczywiście co się dzieje to kula “przeskakuje” przez przeciwników. Powiedzcie mi proszę jak to ogarnąć. Czy w nowym wątku zwiększyć fpsy i po prostu zwiększać prędkość pocisku o np. x+=3? Gdy zmniejszę prędkość przemieszczania się do 3 to wiadomo leci bardzo powoli jednak kolizja działa poprawnie.


#2

Poszukaj w internecie pod haslami typu „fast object collision gamedev”. Nawet jezeli ktos Ci tutaj to opisze to i tak prawdopodobnie bedzie to trudne do zrozumienia. A w necie znajdziesz pewnie kilkanascie artykułów na ten temat.


#3

Możesz sprawdzać przecięcie odcinka pomiędzy starym, a nowym punktem takiego pocisku z innymi obiektami. Wtedy nic Ci nie umknie


#4

Mocno polece tutaj używania w takich sytuacjach mnożenie przez Time.FixedDeltaTime w FixedUpdate, który służy do obsługi fizyki. Natomiast jeśli koniecznie tego nie chcemy używać to…
Można spróbować zwiększyć fixedTimestamp (czesciej bedzie sie odswiezala fizyka) albo raycast per frame, ale jak masz dużo pocisków to zamuli.


#5

Po pierwsze który silnik.

Po drugie jakie są ustawienia kolizji i jak jest zaimplementowane przemieszczanie.

Generlanie powinieneś ustawić prędkość i potem silnik fizyki w miarę ogarnie.

Jak sam przemieszczasz obiekt to go teleportujesz wiec silnik sprawdzi tylko miejsce docelowe.

Większość silników ma też “trace” czyli sprawdzenie czy nie ma kolizji na danej llinii, mozesz np tego użyć żeby zobaczyć czy pomiędzy startem a końcem nie ma jakiegoś celu albo ściany. Zanim przemieścisz pocisk.

Poleganie na FPSach to bardzo zły pomysł (jak gra naprawdę źle chodzi typu 2 FPS to fizyka też może się zacząć ostro bugować, tak samo jak jest ekstrmalnie dużo typu 200FPS to niektóre obliczenia mogą trochę inaczej sie zachowywać) natomiast co do zasady nie powinno byc tak ze gra działą ok tylko na jakiejs konkretnej wartości FPS… to sugeruje ze coś jest bardzo nie tak w kodzie albo w ustawieniach.


#6

Sam wszystko pisze od zera w Javie, ot tak żeby mieć swoją gierkę więc silnik kolizje i reszta wszystko jest ustawione na jednym wątku. Dzięki wszystkim za porady :slight_smile:


#7

Czyli, że piszesz swój silnik od zera w Javie? Po co tak robić? Nie lepiej ogarnąć ue4 lub unity?


#8

Gra służy głównie do wykorzystania wiedzy z Javy, nie będzie to dzieło graficzne i artystyczne :smiley:


#9

Ok to teraz jak liczysz kolizje. Jakiś lib do fizyki czy jakiś własny kod.