События триггера Hitbox не всегда регистрируются - PullRequest
0 голосов
/ 10 февраля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...