Блог онлайн школы Пиксель

Как создать хоррор игру на Unity 3D

Unity — один из самых популярных движков для создания 2D- или 3D-игр. На этой платформе разрабатывались популярные проекты в разных жанрах: платформеры, раннеры, экшен-игры, симуляторы и другие.
Школа программирования “Пиксель” обучает детей от 10 лет созданию проектов на “Юнити” и делится бесплатными уроками. В этом уроке мы научимся делать хоррор игру на “Юнити”. В конце материала мы прикрепим скрипты и видеоинструкцию.

Создание проекта на “Юнити” и скачивание материалов

Для игры нам понадобятся 3D-модели, звуки и картинки. Данные материалы мы скачали для примера из интернета, у вас же могут быть свои. Запускаем Unity Hub и создаем новый проект. Переходим по кнопке Window, Asset Store. Далее нажимаем Search Online и находим 2 бесплатных ассета. Floor Materials Pack — это набор текстур для пола и стен, а также Mini First Person Controller, который добавляет управление от первого лица, он нам и понадобится. После добавления на сайте открываем Package Manager и импортируем ассеты в проект. А также перенесем скачанные материалы в “Юнити”.
хорроры на юнити

Создание уровня в “Юнити”

Создаем Plane и придаем ему нужную форму с помощью инструмента Scale. Перемещаем в нулевые координаты. Теперь сделаем стены с помощь кубов, перемещаем и масштабируем их, пока не добьемся нужного результата.
хоррор игры юнити

Наложение текстур в Unity

Переходим в папку с текстурами и перетаскиваем нужную на Plane. Выбираем Plane и в инспекторе раскрываем компонент материала. Подбираем значения Tiling такие, чтобы текстура не была растянута или пережата. То же самое проделываем и с остальными частями комнаты.
как сделать хоррор на юнити

Игровой персонаж в Unity

Удаляем камеру, которая установлена по умолчанию на сцене. Открываем папку с ассетом контроллера персонажа от первого лица. Перетаскиваем версию контроллера без дополнительных опций, так как они в данном случае не нужны. Запускаем и проверяем.
создание хоррора на unity

Освещение в Unity

Удаляем источник света на карте. Нажимаем Window, затем Rendering и открываем окно Lighting. Переместим его в более удобное место. Переключаемся во вкладку Environment. И здесь убираем материал у “Скайбокса”. Затем выставляем задний фон у камеры черного цвета. Теперь в окне Lightning уберем источник света и свечение окружения выставим темного цвета. Мы добавили немного красного для более устрашающего эффекта.
Создадим фонарик для главного героя. Нажимаем на плюс в окне иерархии и выбираем Light, а затем — Spotlight. Перемещаем и поворачиваем в нужную позицию. Теперь в окне иерархии сделаем Spotlight дочерним по отношению к персонажу, чтобы фонарик перемещался вместе с нами. Запустим и проверим. Мы увеличим дальность света и сделаем игру темнее.
создание хоррор игры на unity

Звуковое сопровождение игры

Для создания в игре устрашающей атмосферы добавим звуки на задний план. Создаем источник звука и в инспекторе подключаем скачанный трек. Это можно сделать, переместив его из окна Project. Нажимаем на галочку Loop, чтобы трек играл бесконечно. Запустим и проверим наличие звука в игре. Сделаем композицию тише. Также громкость можно регулировать в самой игре, но при завершении тестирования это значение сбросится, так что не забудьте выставить его после.
как создать хоррор на юнити

Скример-картинка в Unity

Создаем канвас (Canvas), а внутри канваса — Image. Увеличим размер картинки. Переходим в папку со скачанным изображением и кликаем по нему. Тип текстуры выставляем Sprite(2D and UI). Сохраняем изменения и переносим изображение в поле Source Image у картинки на канвасе. Создаем источник звука для скримера и подключаем к нему короткий звуковой файл. Чтобы данный звук не включался вместе с игрой необходимо снять галочку.
Далее создаем папку для скриптов и внутри — скрипт, который будет отвечать за появление скримера. Удаляем все ненужное. Создаем переменную для пугающей картинки, а также переменную для сопровождающего ее звука. Далее объявим корутину, которая используется в данном случае для отсчета времени после появления скримера. Как только вызывается корутина, будет картинка показываться на экран, а также проигрываться пугающий звук. Далее ставим задержку на 1 секунду, а после выключаем картинку. Также необходимо выключить игровой объект, на котором будет висеть скрипт, чтобы скример мог появиться только один раз.
Объявляем функцию OnTriggerEnter, которая вызывается, когда в коллайдер игрового объекта попадают другие объекты. Если таким объектом является игрок, то вызываем корутину, которую мы только что написали.
Переходим в “Юнити” и создадим ловушку, при попадании в которую появится скример. Растянем ее так, чтобы игрок точно в нее попал. Поставим галочку isTrigger и отключим вывод визуальной составляющей объекта. isTrigger отмечает, что данный объект используется для запуска скриптов при попадании внутрь других объектов. Переносим скрипт на ловушку. И подключаем картинку и звук к соответствующим полям на скрипте. Чтобы все работало, не забудем поставить тег Player на игрового персонажа. Запускаем и проверяем.
как сделать хоррор на unity

Скример с 3D-моделью

Теперь копируем ловушку и подкорректируем ее коллайдер. Установим точечный источник света для привлечения внимания игрока. Удалим скрипт со скримером-картинкой. И создадим новый. Удаляем все лишнее. Создаем переменную для звука скримера. А также переменную аниматора, в котором будет храниться анимация. По аналогии с предыдущим скриптом создаем корутину, только здесь после звука и таймера уже на 2 секунды отключим ловушку и запустим анимацию, которую создадим далее. После пишем точно такую же функцию OnTriggerEnter, как и до этого.
Переходим в “Юнити”. Переносим новый скрипт на вторую ловушку. Создадим призрака который будет вылетать, когда игрок попадет в нее. Создаем пустой объект. Перейдем в папку с моделью призрака. Перетаскиваем его на сцену и делаем дочерним к созданному ранее пустому объекту. У данного призрака имеется своя камера, которую нужно отключить.
Создадим звук который будет издавать призрак. Перемещаем его внутрь объекта призрака. Подключаем скачанный звук к звуковому объекту “Юнити”. Снимаем галочку с Play On Awake, чтобы звук не включался вместе с игрой, а на Loop ставим галочку, чтобы при окончании композиция заиграла заново. Увеличим призрака для пущего эффекта и передвинем в нужное место. Развернем его лицом к игроку.
Создаем папку для анимации. Нажимаем Window, открываем окно создания анимации. Создаем новую анимацию. Нажимаем на запись. Передвинем временную отметку, а затем и призрака, чтобы он переместился туда к назначенному нами времени. Если перемещение происходит слишком быстро, необходимо увеличить время анимации в 2 раза. Переходим в окно аниматора. Создаем новое пустое состояние, в которое призрак будет переходить при запуске игры, а далее перемещаем анимацию полета. Делаем переход.
Создаем переменную “Старт”, которая отвечает за переход из пустого состояния в состояние полета. Добавим этому переходу условие, при котором полет начнется только тогда, когда мы переключим старт с помощью скрипта в true. Теперь в скрипте назначим анимацию и звук в соответствующих полях и отключим бесконечное повторение анимации.
как сделать хоррор игру в юнити
На этом урок по созданию хоррора в “Юнити” окончен. Если вы хотите глубже разобраться в “Юнити”, приглашаем вас на онлайн-курс в школе “Пиксель”. Мы научим вас создавать 2D- и 3D-игры в различных жанрах с нуля. Вы сможете взглянуть на компьютерные и мобильные игры глазами разработчика и понять, подходит ли вам это направление.

Скрипты из видео:

Screamer:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Screamer : MonoBehaviour
{
public GameObject pic;
public AudioSource sound;
private IEnumerator CoroutineBoo()
{
pic.SetActive(true);
sound.Play();
yield return new WaitForSeconds(1);
pic.SetActive(false);
gameObject.SetActive(false);
}
private void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
StartCoroutine(CoroutineBoo());
}
}
}

Screamer2:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Screamer2 : MonoBehaviour
{
public AudioSource sound;
public Animator anim;
private IEnumerator CorutineBoo()
{
sound.Play();
yield return new WaitForSeconds(2);
gameObject.SetActive(false);
anim.SetBool("start", true);
}
private void OnTriggerEnter(Collider other)
{
if(other.tag == "Player")
{
StartCoroutine(CorutineBoo());
}
}
}

Видео по созданию хоррора на Unity:

Бесплатные видеоуроки Unity для детей