События триггера Hitbox не всегда регистрируются

Я пытаюсь реализовать базовую боевую механику в 2D-платформерной игре. Я создал игровые объекты hitbox и hurtbox, которые являются потомками игровых объектов персонажей. Каждый из объектов hitbox и hurtbox имеет свои собственные 2D коллайдеры и жесткие тела. Я пытаюсь использовать событие OnTriggerEnter2D для проверки столкновения хитбоксов с hurtboxes. Хотя это работает правильно, когда у меня всегда был включен коллайдер hitbox для целей тестирования, теперь, когда я динамически включаю и отключаю коллайдер hitbox, событие триггера не всегда срабатывает, даже если я могу визуально проверить, что коллайдеры хитбокса игрока и вражеские коробки врагов перекрываются.

Это рисованная игра, поэтому я использую Spine для анимации и использую встроенную в Spine систему событий, чтобы определить, когда хитбоксы должны быть включены и выключены. Я проверил, что эти события правильно запускаются и регистрируются в Unity с помощью отладочных сообщений. Я также настроил физические слои так, чтобы hurtboxes и hitboxes находились на слое "pushbox", и этот слой взаимодействовал только с другими pushboxbox.

Я подозреваю, что в некоторых случаях хитбокс отключается, прежде чем Unity сможет рассчитать триггерные события. Сама анимация длится около секунды, и окно, в течение которого хитбокс становится "активным", короче этого. Я попытался увеличить размер хитбокса, а также увеличить активную длительность хитбокса, но я немного ограничен, так как не хочу, чтобы хиты регистрировались до посадки пунша, и я не хочу хитбокс быть слишком активным после этого.

Мой код для включения хитбокса и регистрации триггерных событий очень прост:

//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 кинематические твердые тела с непрерывным обнаружением столкновений.

0 ответов

Другие вопросы по тегам