Теперь, когда вы добавили здоровье главному герою, давайте добавим возможность восстановления здоровья .
Для этого будем использовать триггеры. Триггеры — это особый вид коллайдера. Они не блокируют движение, но физическая система все равно проверяет, не столкнется ли персонаж с ними. Триггер отправляет сообщение, когда персонаж касается или попадает в него, чтобы мы могли обработать эти событие.
Начнем с создания коллекционного игрового объекта здоровья.
В окне проекта перейдите в Assets > Art > Sprites > VFX и найдите CollectibleHealth. Перенесите его на сцену, задайте значение Pixel Per Unit, чтобы скорректировать размер спрайта:
Затем добавьте компонент Box Collider 2D к новому игровому объекту и измените размер коллайдера, чтобы он лучше соответствовал спрайту.
Если сейчас запустить игру, то Ruby столкнется с предметом здоровья так же, как с металлическим кубом. Но это не то, что вам нужно.
Выйдите из режима игры и в инспекторе игрового объекта ягоды найдите компонент Box Collider 2D. Установите флажок для свойства Is Trigger:
Теперь во время игры, персонаж будет проходить сквозь коллекционный предмет здоровья. Физическая система регистрирует столкновение, но поскольку еще нет кода для его обработки, то наша игра не реагирует на столкновение.
Давайте добавим код для обработки столкновения. В окне иерархии выберите объект ягоды и добавьте в инспекторе новый компонент New Script:
Затем нажмите на стрелку вправо рядом с названием компонента и задайте название скрипта HealthCollectible и нажмите кнопку Create and Add:
В окне проекта появится еще один скрипт с названием HealthCollectible, дважды щелкните по нему, чтобы открыть его в редакторе кода.
Нам нужно, чтобы скрипт определял, когда Ruby сталкивается с коллекционным игровым объектом здоровья, и увеличивал текущее значение здоровья персонажа. Для этого нам понадобится следующее специальное имя встроенного метода Unity
private void OnTriggerEnter2D(Collider2D collision)
Чтобы правильно его написать, используйте подсказку. Начните набирать название метода "OnTrigger", а затем в выпадающем списке найдите полное его название, перейдите на него и нажмите Enter или дважды кликните мышкой по нужной строке:
Убедитесь, что вы используете правильное написание названием метода и типа параметра, потому что Unity использует их, чтобы найти этот метод в вашем скрипте, когда ей нужно его вызвать.
Точно так же, как Unity вызывает функцию Update в каждом кадре, она вызывает этот метод OnTriggerEnter2D в первом кадре, который следует после обнаружения столкновения коллайдера-триггера с каким-либо Rigidbody2D. Параметр с именем other будет содержать информацию о коллайдере объекта с Rigidbody2D, с которым произошло столкновение.
Добавьте простой Debug.Log в тело метода, чтобы вывести в консоль сообщение о столкновении:
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.Log("Object: " + collision);
}
Методы Start и Update в данном случае нам не нужны, поэтому можно их просто удалить.
Проверьте скрипт и сохраните его:
Вернитесь в редактор Unity и запустите игру. Теперь, когда Ruby касается предмета коллекционирования, в консоли появляется сообщение о том, что Ruby вошел в триггер: