Найти тему
Uniread | Блог про Unity

Взаимодействие с окружением через Raycast

В этой статье я расскажу как сделать взаимодействие с окружением через Raycast в Unity. Делать взаимодействие я буду на готовом персонаже которого я делал в этой статье.

Для начала в инспекторе добавим камере новый скрипт который мы назовем UseControl.

Напишем для взаимодействия следующий код:

-2

В методе 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) - отрисует луч в окне сцены при запуске игры.

Уже сейчас минимальное взаимодействие готово, можем посмотреть как это будет работать в игре.

Поставим на сцену куб, и можно увидеть, что при наведении на куб луч желтый, а если отвести камеру луч белый.

-3
-4

Нужно улучшить код, сделаем так, чтобы при нажатии "Е" куб менял цвет.

Создадим новый скрипт и поместим его в куб, назовем скрипт Usable. В скрипте напишем следующее:

-5

В методе Start() напишем что цвет куба становится серым, далее напишем публичный метод Use(), и сделаем проверку. Возьмем компонент Renderer, и если у него цвет - серый, то меняем его на синий, иначе меняем обратно на серый.

Далее вернемся в скрипт UseControl. Допишем в него следующее:

-6

Напишем проверку, если объект на который попал луч и игрок нажал "Е" (if (hit.collider.gameObject.GetComponent<Usable>() && Input.GetKeyDown(KeyCode.E))) имеет компонент Usable, то у него вызывается публичный метод Use().

Проверим как это работает в игре. Наведемся на куб и луч станет желтым (Debug.DrawRay(transform.position, transform.forward * 3, Color.yellow);), затем нажмем "Е" и куб поменяет цвет.

-7
-8

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