Уничтожение врагов прыжком, как в «Марио» Unity 2D

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Здравствуйте! В этой статье хотел бы поделиться как реализовать, уничтожение врагов прыжком, как в Марио. Сам, еще учусь, так что если буду какие-нибудь полезные советы или подсказки пишите в комментарии обязательно прочту. Ну что же, после многочисленных просмотров туториалов, и прочитанных статей было найдено всего два интересных, и наверное проще всего в исполнение вариантов:

  • первый это соприкосновение точек коллайдеров,
  • второй это соприкосновение коллайдеров, когда на объект вешаются два коллайдера один отнимает жизнь у игрока, а второй уничтожает объект к которому он привязан.

Для начала напишем функцию которая будет отнимать жизнь у игрока, и необходима для обоих вариантов:

public int health = 3; 
void Hurt()
    {
        health--;
        if (health <= 0)
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

1 вариант


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

void OnCollisionEnter2D(Collision2D collision)
    {
        Enemy enemy = collision.collider.GetComponent<Enemy>();
        if (enemy != null)
        {
            foreach (ContactPoint2D point in collision.contacts)
            {
                if (point.normal.y >= 0.6f)
                {
                    enemy.EnemyHurt();
                }
                else
                {
                    Hurt();
                }
            }
        }

(Фрагмент кода который вешается на игрока)

public void EnemyHurt()
    {
        Destroy(this.gameObject);
    }

(Фрагмент кода который вешается на врага )

2 вариант


Добавляем коллайдер делаем его чуть выше чем основной коллайдер, ставим галочку “is Trigger” на объект вешаем скрипт, и добавляем вот этот фрагмент кода.

private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.name == "Player")
            Destroy(this.gameObject);
    }

(Фрагмент кода который вешается на врага )

Когда коллайдер соприкоснется с объектом под названием “Player” объект уничтожиться (в качестве метки соприкосновения, можно использовать tag).

Дальше в этом же объекте создаем еще один gameObject называем его DeathZone. Добавляем на него коллайдер, делаем его чуть больше, и ставим галочку “is Trigger”.



  private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.name == "DeathZone")
        {
            Hurt();
        }
    }

(Фрагмент кода который вешается на игрока)

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


(Второй вариант)

Так же можно еще добавить, чтобы игрок отпрыгивал после уничтожения врага. Ну что же вроде бы все, всем спасибо за внимание!
Источник: https://habr.com/ru/post/474352/


Интересные статьи

Интересные статьи

Многие компании в определенный момент приходят к тому, что ряд процессов в бизнесе нужно автоматизировать, чтобы не потерять свое место под солнцем и своих заказчиков. Поэтому все...
Как-то у нас исторически сложилось, что Менеджеры сидят в Битрикс КП, а Разработчики в Jira. Менеджеры привыкли ставить и решать задачи через КП, Разработчики — через Джиру.
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
Эта статья для тех, кто собирается открыть интернет-магазин, но еще рассматривает варианты и думает по какому пути пойти, заказать разработку магазина в студии, у фрилансера или выбрать облачный серви...
В статье описаны необходимые параметры сервера для оптимальной работы сайта на платформе 1С-Битрикс.