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

в 17:00, , рубрики: 2d, C#, unity, unity3d, платформер, разработка игр

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

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

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

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”.

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

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

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

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

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

Так же можно еще добавить, чтобы игрок отпрыгивал после уничтожения врага. Ну что же вроде бы все, всем спасибо за внимание!

Автор: Дмитрий Кривошеин

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js