Теперь давайте починим робота при попадании в него шестеренки. нам потребуется написать метод в скрипте 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 урон.