@fleshik

Почему у персонажа в Unity при столкновении с врагом не отнимается последняя жизнь?

Здравствуйте такая проблема курс "Unity Базовый курс: 2D платформер с нуля" когда у персонажа остается 1 жизнь он становится бессмертным сколько бы не сталкивался с врагами эта жизнь не отнимается (первые две жизни отнимаются нормально) в чем может быть проблема? (В каком из скриптов можно поискать ошибку скрипты названы также как в курсе)
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Проблема очевидна в коде отнимания жизни или умирания. К 80 годам стану как Ванга, тогда отвечу конкретно в какой строке проблема.
Ответ написан
@Ezekiel4
Охотник на пиратов и сборщик монолитов
На курсах обычно дают один из двух вариантов:

1) Из текущего здоровья отнимают дельту и затем проверяют, не упало ли здоровье в условие:
public int healthCurrent;

public void OnHealthChanged(int healthDelta)
	healthCurrent -= healthDelta;
	// update health bar
	if (healthCurrent <= 0) {
		// death
	}
}

В этом варианте у вас может быть ошибка в условии. Например в примере ниже реально можно попасть в ситуацию, когда персонаж стал бессмертным:
public int healthCurrent;

public void OnHealthChanged(int healthDelta)
	if (healthCurrent > 0) {
		healthCurrent -= healthDelta;
		// update health bar
		if (healthCurrent < 0) {
			// death
		}
	}
}

2) Через Mathf.Clamp:
public int healthCurrent;
public int healthMaximum;

public void OnHealthChanged(int healthDelta)
	healthCurrent = Mathf.Clamp(healthCurrent - healthDelta, 0, healthMaximum);
	// update health bar
	if (healthCurrent == 0) {
		// death
	}
}


В этом варианте помимо неправильного условия также можно случайно ошибиться в аргументах функции Clamp и вместо 0 указать 1, а проверять будет именно 0.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы