В этой статье я расскажу как сделать взаимодействие с окружением через Raycast в Unity. Делать взаимодействие я буду на готовом персонаже которого я делал в этой статье.
Для начала в инспекторе добавим камере новый скрипт который мы назовем UseControl.
Напишем для взаимодействия следующий код:
В методе Update() объявляем переменную hit типа RaycastHit. RaycastHit -
это структура, используемая для получения информации обратно из Raycast.
Далее идет проверка если Physics.Raycast(this.transform.position, transform.forward, out hit, 3f) будет true, то цвет луча станет желтый, а в консоль выведется "Did Hit". Иначе луч будет белым, а консоль выведется "Did not Hit".
this.transform.position - это точка откуда будет исходить луч.
transform.forward - это куда будет направлен луч, то есть вперед
out hit - куда будут идти данные от луча.
3f - длина луча.
Debug.DrawRay(transform.position, transform.forward * 3, Color.white) - отрисует луч в окне сцены при запуске игры.
Уже сейчас минимальное взаимодействие готово, можем посмотреть как это будет работать в игре.
Поставим на сцену куб, и можно увидеть, что при наведении на куб луч желтый, а если отвести камеру луч белый.
Нужно улучшить код, сделаем так, чтобы при нажатии "Е" куб менял цвет.
Создадим новый скрипт и поместим его в куб, назовем скрипт Usable. В скрипте напишем следующее:
В методе Start() напишем что цвет куба становится серым, далее напишем публичный метод Use(), и сделаем проверку. Возьмем компонент Renderer, и если у него цвет - серый, то меняем его на синий, иначе меняем обратно на серый.
Далее вернемся в скрипт UseControl. Допишем в него следующее:
Напишем проверку, если объект на который попал луч и игрок нажал "Е" (if (hit.collider.gameObject.GetComponent<Usable>() && Input.GetKeyDown(KeyCode.E))) имеет компонент Usable, то у него вызывается публичный метод Use().
Проверим как это работает в игре. Наведемся на куб и луч станет желтым (Debug.DrawRay(transform.position, transform.forward * 3, Color.yellow);), затем нажмем "Е" и куб поменяет цвет.
В дальнейшем вы можете вызывать более сложные скрипты, я рассказал о базовом взаимодействии с помощью Raycast. Его функционал не ограничивается только таким взаимодействием, его можно применить во множестве механик. На этом все.