Я работаю над платформером, где одна из основных механик заключается в том, что когда вы бьете врагов снизу (или бьете их верхом, как это фактически реализовано в коде), они теряют здоровье.Понятно, что во время бега персонаж игрока и персонаж противника действительно сталкиваются, так как они влияют друг на друга.Однако 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: Оказывается, вторая проблема, потому что я забыл ввести здоровье врага.К сожалению.