Я пытаюсь реализовать базовую боевую механику в 2D-платформерной игре.Я создал игровые объекты hitbox и hurtbox, которые являются потомками игровых объектов персонажей.Каждый из объектов hitbox и hurtbox имеет свои собственные 2D коллайдеры и жесткие тела.Я пытаюсь использовать событие OnTriggerEnter2D для проверки столкновения хитбоксов с hurtboxes.Хотя это работает правильно, когда у меня всегда был включен коллайдер hitbox для целей тестирования, теперь, когда я динамически включаю и отключаю коллайдер hitbox, событие триггера не всегда срабатывает, даже если я могу визуально проверить, что коллайдеры хитбокса игрокаи вражеские коробки врагов перекрываются.
Это рисованная игра, поэтому я использую Spine для анимации и использую встроенную систему Spine Events, чтобы определить, когда хитбоксы должны быть включены и выключены.Я проверил, что эти события правильно запускаются и регистрируются в Unity с помощью отладочных сообщений.Я также настроил физические слои так, чтобы наборы уртов и хитбоксы находились на уровне «pushbox», и этот слой взаимодействовал только с другими pushboxbox.
Я подозреваю, что в некоторых случаях hitbox используетсяотключено до того, как Unity сможет рассчитать триггерные события.Сама анимация длится около секунды, и окно, в течение которого хитбокс становится «активным», короче этого.Я попытался увеличить размер хитбокса, а также увеличить активную длительность хитбокса, но я немного ограничен, так как не хочу, чтобы хиты регистрировались до посадки пунша, и я не хочу хитбоксбыть слишком активным после этого.
Мой код для включения hitbox и регистрации событий триггера очень прост:
//toggle hitbox on and off
public void EnableHitbox(bool enabled)
{
coll.enabled = enabled;
Debug.Log("Hitbox enabled: " + enabled);
}
//check for collisions with hurtboxes
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.transform.tag == "Hurtbox" && collision.transform.parent.transform.tag == "Enemy")
{
Debug.Log("Hitbox hit enemy");
}
}
Все объекты hitbox и hurtbox имеют активные 2D кинематические твердые тела снепрерывное обнаружение столкновений.