OnCollisionEnter2D не активируется, несмотря на очевидное столкновение - PullRequest
0 голосов
/ 17 октября 2018

Я работаю над платформером, где одна из основных механик заключается в том, что когда вы бьете врагов снизу (или бьете их верхом, как это фактически реализовано в коде), они теряют здоровье.Понятно, что во время бега персонаж игрока и персонаж противника действительно сталкиваются, так как они влияют друг на друга.Однако OnCollisionEnter2D, который я использую для получения эффектов, склонен не соглашаться, поскольку ни один из эффектов не возникает, когда я их использую.Вот текущий код для него:

void OnCollisionEnter2D(Collision collision)
{
    if (collision.collider.gameObject.layer == 10)
    {
        print("yeet");  //debug text

        if (hitEnemy == true)
            collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
        else
            health -= 1;
    }
}

Я пытался:

  • Добавление и удаление «.collider» из «столкновения».lines.

  • Добавление и удаление ".gameObject" из одних и тех же строк.

  • Использование обоих слоев и тегов для проверки.

  • Использовали как имя слоя, так и номер слоя для проверки.

  • Удаление всего содержимого внешнего оператора it, выполняемого для "health - = 1", и использование текста отладки для просмотраесли проблема связана с тем, как работает hitEnemy (по-видимому, нет).

  • Использование OnCollisionEnter и OnCollisionEnter2D.

  • Провереноматрица коллайдера.

  • Изменен тип врага на «статический».

  • Проверено, активирован ли «Триггер» (в настоящее время это не так)t).

Буду признателен за любую помощь.Я также готов опубликовать любые другие вещи (другие части кода, BoxCollider2D / RigidBody2D), если вы думаете, что это поможет.

Обновление: я отредактировал свой код и исправил вышеуказанную проблему, но теперь врагперсонаж сразу исчезает, когда я запускаю его, даже если мой персонаж их не бьет.Вот текущий код:

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.gameObject.tag == "Enemies")
    {
        print("yeet");  //debug text

        if (hitEnemy == true)
            collision.collider.gameObject.GetComponent<EnemyMove01>().health -= 1;
        else
            health -= 1;
    }
}

И так как это может быть связано с тем, что hitEnemy всегда имеет значение true, вот код активации:

hitEnemy = Physics2D.OverlapCircle(attackpos.position, attackRange, whatisEnemies);

attackRange равен 0.5, а attackpos присоединен кигровой объект, который находится над персонажем игрока (я могу получить скриншот, если вы думаете, что это поможет).whatisEnemies - это маска слоя, установленная для слоя «Враги».

Обновление 2: Оказывается, вторая проблема, потому что я забыл ввести здоровье врага.К сожалению.

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