Top.Mail.Ru
← Все статьи журнала

Как сделать 3D игру на Unity

Как сделать 3D игру на Unity

Unity – это кросс-платформенный движок для разработки игр, который используется для создания 2D и 3D игр на множестве платформ, включая PC, мобильные устройства и игровые консоли. В этой статье мы рассмотрим, как создать 3D игру на Unity с помощью проекта «Roll-A-Ball».

Проект «Roll-A-Ball» – это классическая игра, в которой игрок управляет шариком и собирает монеты. Она идеально подходит для начинающих разработчиков, поскольку не требует большого количества кода и предоставляет хорошую основу для изучения основных концепций Unity, таких как создание сцены, настройка камеры, создание объектов и управление ими.

Шаг 1: Установка Unity

Установка Unity

Первым шагом для создания 3D игры на Unity является установка самого движка. Unity может быть загружен с официального сайта: https://unity.com/. Необходимо выбрать подходящую версию и установить ее на ваш компьютер.

Шаг 2: Создание нового проекта

Создание нового проекта Unity

После установки Unity, необходимо создать новый проект. Для этого запустите Unity и нажмите «New» в окне «Project Wizard». Введите название проекта и выберите место, где вы хотите сохранить проект. Затем нажмите кнопку «Create».

Шаг 3: Создание сцены

Создание сцены Unity

После создания нового проекта необходимо создать сцену для нашей игры. Для этого выберите «File» -> «New Scene» в главном меню Unity. Затем нажмите на кнопку «Save» и выберите место, где вы хотите сохранить сцену.

Шаг 4: Добавление объектов

Добавление объектов Unity

Теперь мы готовы начать добавлять объекты на сцену. Для создания шарика, выберите «GameObject» -> «3D Object» -> «Sphere» в главном меню Unity. Затем измените размер шарика, щелкнув правой кнопкой мыши на объекте в иерархии и выбрав «Scale». Измените значение масштаба шарика на (0.5, 0.5, 0.5).

Чтобы создать пол, выберите "GameObject» -> «3D Object» -> «Plane». Затем измените масштаб плоскости на (5, 1, 5).

Шаг 5: Создание материалов

Создание материалов Unity

Теперь мы готовы добавить материалы наших объектов.

Выберите «Assets» -> «Create» -> «Material» в главном меню Unity. Затем назовите материал «BallMaterial» и установите цвет шарика на красный. Для этого выберите цвет в окне «Inspector» для нового материала.

Аналогично создайте материал для пола, назвав его «FloorMaterial». Установите цвет пола на синий.

Шаг 6: Назначение материалов

Назначение материалов Unity

Теперь мы готовы назначить созданные материалы на наши объекты. Щелкните правой кнопкой мыши на шарике в иерархии и выберите «Add Component» -> «Mesh Renderer» в контекстном меню.

В окне «Inspector» выберите созданный ранее материал «BallMaterial» в разделе «Materials».

Теперь сделайте то же самое для плоскости. Щелкните правой кнопкой мыши на плоскости в иерархии и выберите «Add Component» -> «Mesh Renderer» в контекстном меню. В окне «Inspector» выберите созданный ранее материал «FloorMaterial» в разделе «Materials».

Шаг 7: Настройка камеры

Настройка камеры Unity

Теперь мы готовы настроить камеру. Выберите «GameObject» -> «Create Empty» в главном меню Unity, чтобы создать пустой объект. Назовите его «Main Camera». Затем выберите новый объект «Main Camera» в иерархии и в окне «Inspector» установите следующие параметры:

Поле зрения (FOV): 60

Расстояние до ближней плоскости отсечения (Near): 0.3

Расстояние до дальней плоскости отсечения (Far): 1000

Шаг 8: Создание скриптов

Создание скриптов Unity

Теперь мы готовы создать скрипты для управления шариком и сбора монет. Создайте новую папку «Scripts» в окне «Project». Щелкните правой кнопкой мыши на созданной папке и выберите «Create» -> «C# Script».

Назовите первый скрипт «PlayerController». Этот скрипт будет управлять шариком.

Откройте скрипт и введите следующий код:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController : MonoBehaviour { public float speed; private Rigidbody rb; void Start() { rb = GetComponent(); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); rb.AddForce(movement * speed); } }
Код Unity

Этот скрипт определяет, как шарик будет перемещаться по уровню.

Поле «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.

Редактор Unity

Создайте еще один скрипт, который мы будем использовать для сбора монет. Щелкните правой кнопкой мыши на папке «Scripts» в окне «Project» и выберите «Create» -> «C# Script».

Назовите скрипт «Rotator». Откройте скрипт и введите следующий код:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Rotator : MonoBehaviour { void Update() { transform.Rotate(new Vector3(15, 30, 45) * Time.deltaTime); } }
Редактор Unity

Этот скрипт поворачивает монеты вокруг своей оси. Мы используем функцию «transform.Rotate» для поворота монет на 15 градусов вокруг оси X, 30 градусов вокруг оси Y и 45 градусов вокруг оси Z. Мы также умножаем этот вектор на «Time.deltaTime», чтобы сделать поворот плавным и зависящим от времени.

Сохраните скрипт и вернитесь в редактор Unity. Щелкните правой кнопкой мыши на монетке в иерархии и выберите «Add Component» -> «Scripts» -> «Rotator» в контекстном меню.

Шаг 9: Расстановка монет

Расстановка монет Unity

Теперь мы готовы добавить монеты на наш уровень. Создайте пустой объект, назовите его «Coins». В этом объекте мы будем хранить все монеты.

Создайте еще один пустой объект внутри «Coins» и назовите его «Coin».

Пустой объект внутри «Coins»

Мы будем использовать объект «Coin» в качестве прототипа для каждой монеты. Создайте копию объекта «Coin», щелкнув правой кнопкой мыши на нем в иерархии и выбрав «Duplicate» из контекстного меню. Переместите копию объекта «Coin» в нужное место на уровне, используя инструмент «Move» из панели инструментов слева или клавиши W/A/S/D. Повторите этот процесс, пока не добавите все монеты на уровень.

Теперь мы должны сделать так, чтобы шарик мог собирать монеты. Откройте скрипт «PlayerController» и добавьте следующий код в метод «void OnTriggerEnter(Collider other)»:

if (other.gameObject.CompareTag("Coin")) { other.gameObject.SetActive(false); }

Этот код проверяет, если объект, с которым столкнулся шарик, имеет тег «Coin», то мы деактивируем этот объект с помощью метода «SetActive(false)». Это скроет монету и она больше не будет отображаться на уровне.

Сохраните скрипт и вернитесь в редактор Unity. Выберите любую монету на уровне в иерархии и в окне «Inspector» установите значение «Tag» равным «Coin».

Теперь вы можете запустить игру и собирать монеты, перемещая шарик по уровню с помощью клавиатуры или WASD.

Шаг 10: Добавление звуков

Добавление звуков Unity

Наконец, мы можем добавить звуковые эффекты нашей игре. Создайте папку «Audio» в окне «Project». Затем перетащите любой звуковой файл в эту папку. Например, вы можете использовать звук «coin_pickup.wav», который можно найти в интернете.

Создайте новый пустой объект в иерархии и назовите его «Audio Manager». Добавьте компонент «Audio Source» на объект «Audio Manager». В разделе «Audio Source» в окне «Inspector» выберите звуковой файл, который вы добавили в папку «Audio». Установите галочку на «Loop» и «Play On Awake». Это заставит звук проигрываться бесконечно, когда игра запущена.

Редактор Unity

Откройте скрипт «PlayerController» и добавьте следующий код в метод «void OnTriggerEnter(Collider other)»:

if (other.gameObject.CompareTag("Coin")) { other.gameObject.SetActive(false); AudioSource audio = GetComponent(); audio.Play(); }

Этот код получает компонент «Audio Source» из объекта «Audio Manager» и вызывает метод «Play», чтобы воспроизвести звук «Pickup». Обратите внимание, что этот код использует «GetComponent» для получения компонента «Audio Source» из другого объекта в сцене.

Теперь нам нужно определить, что должно происходить при сборе всех монет на уровне. Мы будем использовать компонент «Level Manager», чтобы определить это.

Вернитесь к объекту «Level Manager» и добавьте следующий код:

using UnityEngine; using UnityEngine.SceneManagement; public class LevelManager : MonoBehaviour { public void LoadNextLevel() { SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1); } }

Этот код добавляет публичный метод «LoadNextLevel», который загружает следующий уровень в сцене, используя метод «LoadScene» из компонента «SceneManager». Мы будем вызывать этот метод, когда все монеты на уровне будут собраны.

Теперь, вернитесь к объекту «Player» и откройте скрипт «PlayerController». Добавьте следующий код в верхней части скрипта, после определения переменных:

public int coinCount; public int coinTotal; public GameObject levelManager;

Этот код добавляет две публичные переменные «coinCount» и «coinTotal», которые мы будем использовать для подсчета собранных монет и общего количества монет на уровне соответственно. Мы также добавляем переменную «levelManager», чтобы иметь доступ к компоненту «Level Manager» из скрипта «PlayerController».

Теперь, в функции «OnTriggerEnter», после кода, который обрабатывает сбор монеты, добавьте следующий код:

Этот код добавляет две публичные переменные «coinCount» и «coinTotal», которые мы будем использовать для подсчета собранных монет и общего количества монет на уровне соответственно. Мы также добавляем переменную «levelManager», чтобы иметь доступ к компоненту «Level Manager» из скрипта «PlayerController». Теперь, в функции «OnTriggerEnter», после кода, который обрабатывает сбор монеты, добавьте следующий код:

Этот код увеличивает значение переменной «coinCount» на 1 каждый раз, когда игрок собирает монету. Затем он проверяет, равно ли значение «coinCount» общему количеству монет на уровне, хранящемуся в переменной «coinTotal». Если это так, то мы вызываем метод «LoadNextLevel» из компонента «Level Manager», который загружает следующий уровень в сцене.

Игра «Roll-A-Ball» на Unity

Теперь мы закончили с созданием игры «Roll-A-Ball» на Unity! Вы можете запустить игру и наслаждаться прохождением уровней, собирая монеты и управляя шариком. Надеюсь, этот гайд помог вам изучить основы создания игр на Unity и дал вам некоторые идеи о том, как можно использовать эту мощную платформу для создания своих собственных.

Ну а если вы хотите научится создавать 3D игры сами, то запишитесь на бесплатный пробный урок по Unity в нашей школе программирования для детей Progkids.

Полный код скриптов доступен по ссылке: https://github.com/KarenConstantine/roll-a-ball/blob/main/3d.txt

Карен Константин

Преподаватель Progkids

Еще можно почитать

Курсы для детей

Progkids обратная связь

Записаться на бесплатное занятие проще простого

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

Оставить заявку

ok image
Ваша заявка отправлена. Скоро мы свяжемся с Вами
Ошибка при отправке формы