Rozrzut z broni w grze 2d

Rozrzut z broni w grze 2d
TR
  • Rejestracja:ponad 2 lata
  • Ostatnio:11 miesięcy
  • Postów:24
0

Nie wiem jak zrobic fajny rozrzut z broni shotgun. Zrobilem cos takiego

Kopiuj
    Vector3 pozycjaKursora;
    Vector3 kierunek;
    float szybkosc = 4f;
    float zasieg = 2f;
    float startTime;
    int randomNumber;
    void Start()
    {
        pozycjaKursora = Input.mousePosition;
        pozycjaKursora = Camera.main.ScreenToWorldPoint(pozycjaKursora);
        pozycjaKursora.z = 0;
        kierunek = pozycjaKursora - transform.position;
        float x = Random.Range(-1.5f, 1.5f);     
        kierunek.y = x;

Czyli pobiera pozycje myszki i tam ma strzelac + jakis rozrzut. Problem mi sie pojawia jak myszka jestem nad postacia myszka albo pod. Pociski potrafia leciec w druga strone. Po lewej i prawej stronie jak jestem myszka dziala idealnie.

B1
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 5 godzin
  • Postów:411
1

Najlepiej chyba to będzie jak robisz przesunięcie o ileś stopni względem kursora, a nie o przesunięcie tylko na x.

TR
  • Rejestracja:ponad 2 lata
  • Ostatnio:11 miesięcy
  • Postów:24
0

Dobra dzieki za podsuniety pomysl zrobione.

Kopiuj
        pozycjaKursora = Input.mousePosition;
        pozycjaKursora = Camera.main.ScreenToWorldPoint(pozycjaKursora);
        pozycjaKursora.z = 0;

        Vector3 kierunekDoKursora = pozycjaKursora - transform.position;
        float katDoKursora = Mathf.Atan2(kierunekDoKursora.y, kierunekDoKursora.x) * Mathf.Rad2Deg;

        float losowyKat = Random.Range(-15f, 15f);
        float nowyKat = katDoKursora + losowyKat;

        kierunek.x = Mathf.Cos(nowyKat * Mathf.Deg2Rad);
        kierunek.y = Mathf.Sin(nowyKat * Mathf.Deg2Rad);
        kierunek.z = 0f;
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
0

Shotgun to broń, która zwykle w wyniku strzału wyrzuca z lufy całą chmarę pocisków, a nie tylko jeden. Jeśli zależy Ci na tym, aby shotgun faktycznie tak działał, to w momencie strzału generuj n pocisków. Żeby to wyglądało dobrze, każdemu z nich ustal:

  • losowy kąt — kąt bazowy (do kursora) +/- nieduża liczba losowa,
  • losową prędkość — prędkość bazowa +/- nieduża liczba losowa.

Proste, a i rozrzut będzie zapewniony, i cząstki się lekko rozsuną.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
TR
Zrobilem na 6 pociskow i kazdy leci w inna strone. Byl To kawalek kodu prefabu pojedynczego pocisku. Tworze potem Od razu 6 . Musze jeszcze tylko popracowac by ten rozrzut na poczatku byl mniejszy i pozniej wiekszy.
flowCRANE
Emituj te cząstki z tego samego punku w przestrzeni. Ich losowe kąty i prędkości spowodują, że im dalej od lufy, tym bardziej będą się od siebie oddalać. Czyli będą formować koło/elipsę, które/a będzie rosnąć wraz z odległością od lufy.
TR
Dzieki za rady jutro je wprowadze 👍
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:8 minut
  • Postów:6701
0

@furious programming: Taki shotgun też wygląda dobrze :]

screenshot-20230308003707.png


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
2

Tak, choć to mały cheat — to sprite, nie cząstki. ;)


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
several
No i zajebiście, robisz kolizje z jednym prostokątem zamiast wieloma cząstkami, proste, działa i ładnie wygląda ;)
flowCRANE
Jeśli mu taki styl pasuje, to czemu nie. :]
Azarien
@several co innego fizyka a co innego rendering. można rysować cząstki a kolidować jeden prostokąt.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.