• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Unity 2D - problem z zadawaniem obrażeń po wejściu w pułapkę.

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
271 wizyt
pytanie zadane 27 grudnia 2019 w OpenGL, Unity przez AleX1010 Obywatel (1,320 p.)

Witam!

Mam obiekt gracza i obiekt pułapki w postaci kolców. Kolce mają ustawione IsTrigger na colliderze. Zamysł jest taki, żeby po wejściu gracza w te kolce zostało mu zadawane -1 HP co jedną sekundę. Kod wygląda następująco:

public IEnumerator DamagePlayer() //takes 1 hp
    {
        
            if (player.Health >= 1)
            {

                Debug.Log("Zabrano 1 HP");
                player.Health = player.Health - 1f;
                yield return new WaitForSecondsRealtime(1);
                
            }
            else
            {
                Debug.Log("Gracz juz nie zyje!");
            }

        
    }

Powyżej jest przedstawiona funkcja zadająca graczowi 1 punkt obrażeń. Jest zrobiona wykorzystując IEnumerator, ponieważ jak widać w kodzie chciałem opóźnić zadawanie obrażeń o 1 sekundę, żeby nie było to natychmiastowe.

if(isTrapped)
        {
            StartCoroutine(DamagePlayer());
        }

Tutaj powyżej przedstawiam zapis w funkcji Update() dotyczący zadawania tychże obrażeń.

 [SerializeField] private Gamemaster gm;
    private void OnTriggerEnter2D(Collider2D collision)
    {
        gm.isTrapped = true;
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        gm.isTrapped = false;
    }

A tutaj przedstawiam dwie funkcje, które odpowiednio zmieniają wartość zmiennej "isTrapped" w zależności od tego czy gracz wszedl na kolce lub nie.

Problem polega na tym, że życie gracza nie jest odbierane mu o jeden punkt co sekundę tylko kompletnie chaotycznie i praktycznie natychmiast.

Bardzo prosiłbym o pomoc, jeżeli ktoś wie jak rozwiązać powyższy problem :)

komentarz 27 grudnia 2019 przez PolYGlok Pasjonat (19,450 p.)

Nie znam się na tym co robisz ale wiem że jak masło maślane to tak jest coś źle

player.Health = player.Health - 1f;

ja bym zrobił tak

present.player.Health = player.Health - 1f;

ale jak pisałem wyżej nie znam sie na tym.

komentarz 27 grudnia 2019 przez AleX1010 Obywatel (1,320 p.)
Rozumiem o co ci chodzi. Żeby wprowadzić dwie zmienne życia. MaxHP i to aktualne hp. Z pewnością tak zrobię, natomiast nie w tym leży problem :(

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 380 wizyt
pytanie zadane 24 kwietnia 2019 w C# przez Pus_Tako_sy Początkujący (320 p.)
0 głosów
1 odpowiedź 304 wizyt
pytanie zadane 1 marca 2020 w OpenGL, Unity przez Pabllo26 Obywatel (1,280 p.)
0 głosów
1 odpowiedź 409 wizyt
pytanie zadane 2 września 2021 w C# przez hydrogeniumoxygenium Nowicjusz (120 p.)

93,442 zapytań

142,434 odpowiedzi

322,690 komentarzy

62,804 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...