Бильярд на Unity 3D

Учебные материалы для школы программирования. Часть 10

Spoiler

Дорогой читатель! (произносить голосом Николая Дроздова)

Мы на юбилейном, десятом, проекте! Сегодня, стараясь избежать столкновения с полицией нравов, рассмотрим создание игры — бильярд. На этом занятии мы будем работать с системой материалов, освещением, и научимся использовать компоненты и скрипты без программирования.
В этой статье дано описание на примере полностью готового проета, но порядка выполнения работ это не меняет.

Порядок выполнения

Создадим новый 3D-проект, импортируем в него приложенный ассет. Ассет содержит звуки, скрипты и текстуры.

На сцену выставим плейн и зададим ему размер примерно 100×1х100. На плейн установим модель бильярдного стола.

Далее, создадим новый материал, применим ему текстуру ковра, уберём блеск, изменим тайлинг (см. скриншот) и закинем на Plane.

833893ec96cf1ad0bc795f9a2fa6cfcb

Настроим освещение: перейдем во вкладку Light, уберём скайбокс, и выставим заполняющий цвет потемнее.

9b9104666a0b3efba29e4ab5f8ac2568

Настроим туман, чтобы размыть края поля.

226bd496ef483c837ac1afbb95acb9e8

Добавим сверху стола источник света типа Spot и выставим ему мягкие тени.

3b2f626e58a1fb52d09b57dd1e2a11f7

Создадим новую сферу, добавим к ней Rigidbody и закинем, в поле физического материала коллайдера, материал Rubber.
Добавим скрипт Ball и настроим его.

28d5446d62b4c6969ae23f47c28645d0

Чтобы шар не был белым, создадим новый материал и настроим в соответствии со скриншотом.

Чтобы шар отражал мир, надо добавить на сцену новую Reflection Probe и запечь.

94531e2bf5c16b3d4924e1bd047d099e

Удалим стандартную камеру. Следующим шагом будет добавление своей камеры на сцену. Для этого используем префаб FreeLookCameraRig. Настроим его, чтобы он следил за шаром, добавим скорости линейной и поворота.

2c3fd3ee7a973f9c8e05170037a02ec5.png

Сразу же настроим камеру. Выставим ей очистку экрана цветом, в качестве цвета возьмём чёрный.

31cfd8b90e66ae12f12f366fe2be9b86

Далее необходимо создать 15 материалов по номерам шаров, как на скриншоте выше. Создадим новые сферы, добавим к ним Rigidbody и настроим физический материал коллайдера.
Выставим их на сцену, применим материалы и дадим им имена, соответствующие их номеру. В имени должна быть только цифра.

Для звука ударов шаров служит скрипт ImpactSound. Его необходимо добавить игроку и каждому шарику.

7a65a2ef8e1b716fe39ca897f30276de

Теперь, необходимо добавить прицел. Создадим UI→Image, привяжем к ценру экрана и закинем в него картинку прицела.

163ef6006e620676ec8e228bc516be5c

На данном этапе, шар должен свободно кататься по полю по нажатию пробела, бить другие шары и издавать звук удара.
Далее, создадим пустой объект и закинем на него скрипт GameLogic.
Не забудьте создать AudioSource, выставить звук часов и галочки PlayOnAwake и Loop.

cbb4c2356e03acc34b9496cc3741a469

Скрипт следит за временем и ловит попавшие в него шары. Для того, чтобы скрипт мог это делать, необходимо выставить ему коллайдер и поставить галочку is Trigger.

669e397454c3c73c9274715af088441b

Триггер большой, размером 200×1х200 метров, расположен чуть ниже уровня стола, триггер ловит шары и считает их, а в случае попадания шара игрока он перезагружает уровень. Для того, чтобы наш скрипт мог отличать игрока от других шаров, необходимо выставить игроку тег Player.

601fe8af6629d463c87ddfc0afbc2c41

Скрипт требует двух текстовых полей для отображения времени и количества шаров.
Для начала создадим панель, закинем на неё Event Trigger и настроим на метод Shoot внутри скрипта игрока. Альфу выставим в ноль, чтобы панели не было видно.

61d2f180dd63c4caf0b0ba0e46eaca62

Далее, создадим внутри ещё одну панель, привяжем её внизу экрана и создадим внутри два текста:

14ef92f7d9df6a37e2bf3279d9899135

Настроим скрипт GameLogic, используя эти два текстовых поля. Также, закинем звук попадания в лузу.

74132f78f00fa425dc5eabce1416598f

Теперь добавим ещё один скрипт — Score.

d33ad2db46346ef1dd3c2b9ebd680d17

Как видно, он тоже требует 2 текста. Можно продублировать прошлую панель, привязать её к верху экрана и настроить скрипт на неё.

77c331a8770460a5404258dd32e1a906

По желанию, можно добавить ещё одну панель с парой кнопок для выхода из игры, закинуть скрипт RestartAndExit и настроить кнопки на него.

accc9fb3c034d9a5aecf91c7e17d1280

Таже можно добавить максимальный счёт. Создав ещё одно текстовое поле.

284e98746d5c7b20ba6665b0d3ecca6b

Закинем скрипт MaxScore на объект с GameLogic и настроим его на созданное текстовое поле.

3e05b0eb368882b7810e2607843551d0

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

de6cea0494d0bc85c7910472a1354ad6.png

© Habrahabr.ru