Unity – это кросс-платформенный движок для разработки игр, который используется для создания 2D и 3D игр на множестве платформ, включая PC, мобильные устройства и игровые консоли. В этой статье мы рассмотрим, как создать 3D игру на Unity с помощью проекта «Roll-A-Ball».
Проект «Roll-A-Ball» – это классическая игра, в которой игрок управляет шариком и собирает монеты. Она идеально подходит для начинающих разработчиков, поскольку не требует большого количества кода и предоставляет хорошую основу для изучения основных концепций Unity, таких как создание сцены, настройка камеры, создание объектов и управление ими.
Шаг 1: Установка Unity
Первым шагом для создания 3D игры на Unity является установка самого движка. Unity может быть загружен с официального сайта: https://unity.com/. Необходимо выбрать подходящую версию и установить ее на ваш компьютер.
Шаг 2: Создание нового проекта
После установки Unity, необходимо создать новый проект. Для этого запустите Unity и нажмите «New» в окне «Project Wizard». Введите название проекта и выберите место, где вы хотите сохранить проект. Затем нажмите кнопку «Create».
Шаг 3: Создание сцены
После создания нового проекта необходимо создать сцену для нашей игры. Для этого выберите «File» -> «New Scene» в главном меню Unity. Затем нажмите на кнопку «Save» и выберите место, где вы хотите сохранить сцену.
Шаг 4: Добавление объектов
Теперь мы готовы начать добавлять объекты на сцену. Для создания шарика, выберите «GameObject» -> «3D Object» -> «Sphere» в главном меню Unity. Затем измените размер шарика, щелкнув правой кнопкой мыши на объекте в иерархии и выбрав «Scale». Измените значение масштаба шарика на (0.5, 0.5, 0.5).
Чтобы создать пол, выберите "GameObject» -> «3D Object» -> «Plane». Затем измените масштаб плоскости на (5, 1, 5).
Шаг 5: Создание материалов
Теперь мы готовы добавить материалы наших объектов.
Выберите «Assets» -> «Create» -> «Material» в главном меню Unity. Затем назовите материал «BallMaterial» и установите цвет шарика на красный. Для этого выберите цвет в окне «Inspector» для нового материала.
Аналогично создайте материал для пола, назвав его «FloorMaterial». Установите цвет пола на синий.
Шаг 6: Назначение материалов
Теперь мы готовы назначить созданные материалы на наши объекты. Щелкните правой кнопкой мыши на шарике в иерархии и выберите «Add Component» -> «Mesh Renderer» в контекстном меню.
В окне «Inspector» выберите созданный ранее материал «BallMaterial» в разделе «Materials».
Теперь сделайте то же самое для плоскости. Щелкните правой кнопкой мыши на плоскости в иерархии и выберите «Add Component» -> «Mesh Renderer» в контекстном меню. В окне «Inspector» выберите созданный ранее материал «FloorMaterial» в разделе «Materials».
Шаг 7: Настройка камеры
Теперь мы готовы настроить камеру. Выберите «GameObject» -> «Create Empty» в главном меню Unity, чтобы создать пустой объект. Назовите его «Main Camera». Затем выберите новый объект «Main Camera» в иерархии и в окне «Inspector» установите следующие параметры:
Поле зрения (FOV): 60
Расстояние до ближней плоскости отсечения (Near): 0.3
Расстояние до дальней плоскости отсечения (Far): 1000
Шаг 8: Создание скриптов
Теперь мы готовы создать скрипты для управления шариком и сбора монет. Создайте новую папку «Scripts» в окне «Project». Щелкните правой кнопкой мыши на созданной папке и выберите «Create» -> «C# Script».
Назовите первый скрипт «PlayerController». Этот скрипт будет управлять шариком.
Откройте скрипт и введите следующий код:
Этот скрипт определяет, как шарик будет перемещаться по уровню.
Поле «speed» определяет скорость перемещения шарика. Переменная «rb» содержит компонент Rigidbody, который мы будем использовать для перемещения шарика. В методе «Start» мы получаем компонент Rigidbody для шарика. В методе «FixedUpdate» мы получаем ввод от пользователя с помощью функций «Input.GetAxis». Эти функции возвращают значения оси горизонтали и вертикали (для клавиатуры это A/D и W/S соответственно). Мы затем создаем новый вектор «movement» из этих значений и добавляем силу, направленную в этом направлении, с помощью метода «rb.AddForce».
Сохраните скрипт и вернитесь в редактор Unity.
Щелкните правой кнопкой мыши на шарике в иерархии и выберите «Add Component» -> «Scripts» -> «PlayerController» в контекстном меню. В разделе «Player Controller (Script)» в окне «Inspector» установите значение «Speed» на 10.
Создайте еще один скрипт, который мы будем использовать для сбора монет. Щелкните правой кнопкой мыши на папке «Scripts» в окне «Project» и выберите «Create» -> «C# Script».
Назовите скрипт «Rotator». Откройте скрипт и введите следующий код:
Этот скрипт поворачивает монеты вокруг своей оси. Мы используем функцию «transform.Rotate» для поворота монет на 15 градусов вокруг оси X, 30 градусов вокруг оси Y и 45 градусов вокруг оси Z. Мы также умножаем этот вектор на «Time.deltaTime», чтобы сделать поворот плавным и зависящим от времени.
Сохраните скрипт и вернитесь в редактор Unity. Щелкните правой кнопкой мыши на монетке в иерархии и выберите «Add Component» -> «Scripts» -> «Rotator» в контекстном меню.
Шаг 9: Расстановка монет
Теперь мы готовы добавить монеты на наш уровень. Создайте пустой объект, назовите его «Coins». В этом объекте мы будем хранить все монеты.
Создайте еще один пустой объект внутри «Coins» и назовите его «Coin».
Мы будем использовать объект «Coin» в качестве прототипа для каждой монеты. Создайте копию объекта «Coin», щелкнув правой кнопкой мыши на нем в иерархии и выбрав «Duplicate» из контекстного меню. Переместите копию объекта «Coin» в нужное место на уровне, используя инструмент «Move» из панели инструментов слева или клавиши W/A/S/D. Повторите этот процесс, пока не добавите все монеты на уровень.
Теперь мы должны сделать так, чтобы шарик мог собирать монеты. Откройте скрипт «PlayerController» и добавьте следующий код в метод «void OnTriggerEnter(Collider other)»:
Этот код проверяет, если объект, с которым столкнулся шарик, имеет тег «Coin», то мы деактивируем этот объект с помощью метода «SetActive(false)». Это скроет монету и она больше не будет отображаться на уровне.
Сохраните скрипт и вернитесь в редактор Unity. Выберите любую монету на уровне в иерархии и в окне «Inspector» установите значение «Tag» равным «Coin».
Теперь вы можете запустить игру и собирать монеты, перемещая шарик по уровню с помощью клавиатуры или WASD.
Шаг 10: Добавление звуков
Наконец, мы можем добавить звуковые эффекты нашей игре. Создайте папку «Audio» в окне «Project». Затем перетащите любой звуковой файл в эту папку. Например, вы можете использовать звук «coin_pickup.wav», который можно найти в интернете.
Создайте новый пустой объект в иерархии и назовите его «Audio Manager». Добавьте компонент «Audio Source» на объект «Audio Manager». В разделе «Audio Source» в окне «Inspector» выберите звуковой файл, который вы добавили в папку «Audio». Установите галочку на «Loop» и «Play On Awake». Это заставит звук проигрываться бесконечно, когда игра запущена.
Откройте скрипт «PlayerController» и добавьте следующий код в метод «void OnTriggerEnter(Collider other)»:
Этот код получает компонент «Audio Source» из объекта «Audio Manager» и вызывает метод «Play», чтобы воспроизвести звук «Pickup». Обратите внимание, что этот код использует «GetComponent» для получения компонента «Audio Source» из другого объекта в сцене.
Теперь нам нужно определить, что должно происходить при сборе всех монет на уровне. Мы будем использовать компонент «Level Manager», чтобы определить это.
Вернитесь к объекту «Level Manager» и добавьте следующий код:
Этот код добавляет публичный метод «LoadNextLevel», который загружает следующий уровень в сцене, используя метод «LoadScene» из компонента «SceneManager». Мы будем вызывать этот метод, когда все монеты на уровне будут собраны.
Теперь, вернитесь к объекту «Player» и откройте скрипт «PlayerController». Добавьте следующий код в верхней части скрипта, после определения переменных:
Этот код добавляет две публичные переменные «coinCount» и «coinTotal», которые мы будем использовать для подсчета собранных монет и общего количества монет на уровне соответственно. Мы также добавляем переменную «levelManager», чтобы иметь доступ к компоненту «Level Manager» из скрипта «PlayerController».
Теперь, в функции «OnTriggerEnter», после кода, который обрабатывает сбор монеты, добавьте следующий код:
Этот код увеличивает значение переменной «coinCount» на 1 каждый раз, когда игрок собирает монету. Затем он проверяет, равно ли значение «coinCount» общему количеству монет на уровне, хранящемуся в переменной «coinTotal». Если это так, то мы вызываем метод «LoadNextLevel» из компонента «Level Manager», который загружает следующий уровень в сцене.
Теперь мы закончили с созданием игры «Roll-A-Ball» на Unity! Вы можете запустить игру и наслаждаться прохождением уровней, собирая монеты и управляя шариком. Надеюсь, этот гайд помог вам изучить основы создания игр на Unity и дал вам некоторые идеи о том, как можно использовать эту мощную платформу для создания своих собственных.
Ну а если вы хотите научится создавать 3D игры сами, то запишитесь на бесплатный пробный урок по Unity в нашей школе программирования для детей Progkids.
Полный код скриптов доступен по ссылке: https://github.com/KarenConstantine/roll-a-ball/blob/main/3d.txt
Карен Константин
Преподаватель Progkids