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 :)