Найти в Дзене

Unity 2D. Ruby's Adventure. Part 23

Теперь давайте починим робота при попадании в него шестеренки. нам потребуется написать метод в скрипте EnemyController для исправления робота и управления анимацией роботов, когда они исправлены. На данный момент ваш снаряд просто уничтожает себя при столкновении. Но цель состоит в том, чтобы починить с его помощью этих агрессивных сломанных роботов.

Чтобы написать метод починки в скрипте EnemyController, сначала добавьте логическую переменную с именем broken и инициализируйте ее значением true, чтобы робот при запуске игры был сломанным.

bool broken = true;

В методе Update в самом начале добавьте проверку, что робот не сломан. Если условие истинно, значит робота уже починили и он не будет двигаться и наносить Ruby урон, поэтому мы просто выйдем из метода с помощью ключего слова return:

if(!broken)

{

return;

}

Аналогичную проверку добавьте в начало метода FixedUpdate.

А теперь напишем метод, который можно вызвать для исправления робота.

public void Fix()

{

broken = false;

rb.simulated = false;

}

Мы установили для переменной, отвечающей за поломанное состояние значение false, и для свойства симуляции Rigidbody2D значение false.

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

Проверьте скрипт:

Скрипт врага
Скрипт врага
Скрипт врага
Скрипт врага

Теперь осталось только модифицировать функцию OnCollisionEnter2D из скрипта Projectile. Получите EnemyController от объекта, с которым столкнулся снаряд. И если такой компонент у этого объекта есть, значит это робот, и его можно починить при помощи вызова метода Fix():

EnemyController enemy = collision.collider.GetComponent<EnemyController>();

if (enemy != null)

{

enemy.Fix();

}

Проверьте скрипт:

Скрипт шестеренки
Скрипт шестеренки

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