Здравствуйте! В этой статье хотел бы поделиться как реализовать, уничтожение врагов прыжком, как в Марио. Сам, еще учусь, так что если буду какие-нибудь полезные советы или подсказки пишите в комментарии обязательно прочту. Ну что же, после многочисленных просмотров туториалов, и прочитанных статей было найдено всего два интересных, и наверное проще всего в исполнение вариантов:
Для начала напишем функцию которая будет отнимать жизнь у игрока, и необходима для обоих вариантов:
Разберем первый вариант если точка соприкосновения будет больше или ровна высоте 0.6, игрок прыгает сверху враг уничтожается, иначе игрок получает урон.
(Фрагмент кода который вешается на игрока)
(Фрагмент кода который вешается на врага )
Добавляем коллайдер делаем его чуть выше чем основной коллайдер, ставим галочку “is Trigger” на объект вешаем скрипт, и добавляем вот этот фрагмент кода.
(Фрагмент кода который вешается на врага )
Когда коллайдер соприкоснется с объектом под названием “Player” объект уничтожиться (в качестве метки соприкосновения, можно использовать tag).
Дальше в этом же объекте создаем еще один gameObject называем его DeathZone. Добавляем на него коллайдер, делаем его чуть больше, и ставим галочку “is Trigger”.
(Фрагмент кода который вешается на игрока)
Как видно в отличие от первого варианта, во втором варианте использование коллайдеров было чуть больше, а также отсутствовала необходимость использовать триггеры.
(Второй вариант)
Так же можно еще добавить, чтобы игрок отпрыгивал после уничтожения врага. Ну что же вроде бы все, всем спасибо за внимание!
- первый это соприкосновение точек коллайдеров,
- второй это соприкосновение коллайдеров, когда на объект вешаются два коллайдера один отнимает жизнь у игрока, а второй уничтожает объект к которому он привязан.
Для начала напишем функцию которая будет отнимать жизнь у игрока, и необходима для обоих вариантов:
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();
}
}
(Фрагмент кода который вешается на игрока)
Как видно в отличие от первого варианта, во втором варианте использование коллайдеров было чуть больше, а также отсутствовала необходимость использовать триггеры.
(Второй вариант)
Так же можно еще добавить, чтобы игрок отпрыгивал после уничтожения врага. Ну что же вроде бы все, всем спасибо за внимание!