Wpis z mikrobloga

Jak najlepiej zaimplementować coś w rodzaju strzelania z broni automatycznej?

Mam to póki co napisane w taki sposób że w fixedUpdate Instantiate'uję "kulę" co ileś ms w zależności od szybkości danej broni, z tym że obliczam to od Time.time i np. przy wolniejszych broniach jak naciskam LPM to muszę chwilę odczekać zanim strzeli, a chciałbym żeby pierwszy strzał następował w momencie naciśnięcia przycisku. Pewnie mógłbym to jakoś zakodować ale domyślam się że są gotowe rozwiązania tego problemu, więc moglibyście coś polecić?

PS. w zasadzie to nie ma być broń tylko spelle różnej wielkości i efektów, dlatego zależy mi żeby to strzelało pełnymi obiektami

#unity3d #unity #gamedev
  • 10
@Virsky: Możesz zrobić korutyne i odpalić ją przy naciśnięciu LPM i wsadzić tam pętle while, która wykonuje się dopóki trzymasz przycisk (albo dać while(true) i ręcznie stopować korutynę w innym miejscu). W pętli na start dajesz strzał, a potem czekasz określony czas/liczbę klatek i powtarzasz dopóki trzymasz LPM. W ten sposób pierwszy strzał zawsze będzie natychmiastowy.
@Virsky: @ladykagami: ale po co tyle kombinowania, trzymaj pule wielu gotowych pocisków i po prostu wtedy jak ktos klika to go używasz, instant, i ewentualnie tylko powiększanie poola jak trzeba ale jak pociki nie muszą zostać na ziemi czy coś to możesz po prostu je zwracać do puli.
@GotoFinal: a to właśnie nie będzie więcej kombinowania? Tak mam Instantiate i Destroy i niczym się nie martwię, a gierka jest niezbyt skomplikowana więc w wydajności raczej nie będzie różnicy.
via Wykop Mobilny (Android)
  • 3
@Virsky: się liczysz;)
Wystrzelaj na początku a nie na końcu przedziału czasowego.
Zapamiętujesz czas ostatniego strzału i warunek jest taki
Jeśli wciśnięty spust i obecny czas większy od poprzedniego strzały+ pauza i wystrzelaj kolejny i zapisujesz czas.
@Virsky: po pierwsze to wygoogluj sobie object pooling. To że gra prosta to nie ma znaczenia, jak będziesz instancjonowal obiekty często to po jakimś czasie zapchasz pamięć i będziesz miał ścinki.
Jeśli chodzi o strzelanie to jest masa sposobów żeby to zrobić. Korutyny do tego nie są dobre, korutyny się nadają do tego że np musisz być pewny że coś się wydarzyło a zajmuje więcej niż jedną klatkę (np generowanie mapy)
@RadzieckiKonstruktor: zależy o co chodzi, jak masz karabin to jak klikasz to od razu chcesz następny strzał, cooldown potrzebny jest tylko jak trzymasz LMB.
W przypadku czaru osobiście bym odwrócił sytuację tak że musisz naładować czar trzymając LMB przez chwile (jak w Skyrim) i wtedy cooldown jest przed strzałem.