@NickName7331

C#(Unity) — Почему не увеличивается int?

Есть два класса, первый класс родительский, и в нём есть int, и метод, в котором этот int увеличивается. Во втором классе вызывается метод, и по плану, int должен увеличиваться, но ничего не выходит. Вот код:

public int Triger = 0;

public void GetDamage ()
{
    hp--;
     if (hp == 0) //P.S. Объект не один, поэтому должно работать не один раз
            {
		Trigger++;
		Destroy (gameObject);
            }
}

//Второй класс
	void OnTriggerEnter2D(Collider2D collider)
	{
		Unit unit = collider.GetComponent<Unit>();

		if (unit && unit is Character)
		{
			if (Mathf.Abs(unit.transform.position.x - transform.position.x) < 0.3F) GetDamage();
			else unit.ReceiveDamage();
		}

В чём ошибка? За ранее спасибо.
P.S. Это не полный код, если нужен полный, изменю
  • Вопрос задан
  • 462 просмотра
Решения вопроса 2
GavriKos
@GavriKos Куратор тега Unity
Если GetDamage - это часть MonoBehaviour (а судя по всему это так), то немного непонятно, где вы ожидаете увидеть увеличение переменной. Вы же весь GO уничтожаете, вместе с инстансом скрипта.
Ответ написан
Комментировать
Kubatai
@Kubatai
Техник-программист
1. Если это копия рабочего кода, то обратите внимание, что переменная объявлена как Triger, а увеличивается переменная Trigger. Возможно у вас несколько переменных с похожими названиями и вы просто увеличиваете не ту.
2. Если переменная используется несколькими потоками, то используйте interlocked increment.

Пройдитесь пошагово дебаггером по коду или используйте UnityEngine.Debug.Log в методе GetDamage() рядом с Trigger++ для того что бы в реальном времени видеть что происходит в вашем коде. Возможно какое-либо из условий просто не выполняется.

P.S. случаев с неработающим инкрементом в сети нет(за исключение i = i++), советую вам все-таки поискать источник, который обнуляет вашу переменную, или заменить код на i += 1 ;)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы