Ландшафт в Unity3D. Часть 1. Создание террейна в Unity 3D и экспорт карты высот из Unity 3D

  • Начало
  • Блок-Схемы
  • Блоки
  • Переменные
  • Рассказать историю
  • Воспроизведение Аудио
  • Система разговоров
  • Уроки Сообщества
  • Теги Текстового Рассказа
  • Система Вариаций Текста
  • Сохранение и Загрузка
  • Советы по Кодированию
  • Стандартное Кодирование
  • Глоссарий
  • Часто Задаваемые Вопросы
  • Fungus Lua.

Окно Блок-Схемы

Для работы с Fungus необходимо окно Блок-схемы. Откройте и закрепите это окно где-нибудь под рукой, выполнив следующие действия:     Выберите меню: Tools | Fungus | Flowchart Window image     Перетащите окно блок-схемы в место, где вы хотите его закрепить: image     Окно блок-схемы теперь закреплено и является частью вашего макета окна Unity:

Примеры сцен

При установке Fungus создаются две папки, в которых есть themslves (в папке «Fungus») и набор примеров (в папке «FungusExamples»). Примеры включают Drag and Drop, Sherlock и Fungus Town: Вы можете использовать левую часть окна проекта Unity для изучения каждой папки с примерами: Кроме того, можно сделать фильтрацию в окне «Project», чтобы увидеть только сцены (и никаких других файлов), щелкнув на значок справа от панели поиска: Вы можете отменить фильтр, нажав «х» в строке поиска:

Запуск примеров

Чтобы загрузить сцену, дважды щелкните на нужном примере на вкладке «Project», и сцена должна загрузиться. Например, на этом снимке экрана показаны окна Сцена(Scene) и Блок-схема(Flowchart), сцены-примера DragAndDrop: Чтобы запустить загруженную сцену, нажмите кнопку «Play» в центре верхней части окна приложения Unity, а затем выполните все, что имеет смысл на этой сцене (например, нажмите/введите текст/перетаскивайте объекты и т. д.!): Примечание: если вы нажмете кнопку «Play» второй раз, то завершится режим воспроизведения.

Изменения в режиме воспроизведения

Как и во всех проектах Unity, вы можете изменять свойства gameObjects во время работы сцены, но эти изменения действуют только во время работы сцены. Как только вы выйдете из режима воспроизведения, свойства всех объектов на вкладке Иерархии вернутся к свойствам, сохраненным в файле сцены. Это позволяет легко настраивать значения объектов в режиме воспроизведения, а затем, когда достигается желаемое поведение, эти значения нужно установить для сохраненных свойств сцены. Значения, установленные в режиме редактирования, будут сохранены при сохранении вашей сцены (CTRL-S / Command-S или меню: File | Save Scene).

Оттенок Playmode

Иногда мы можем забыть, что мы находимся в режиме Игры в Unity, и вносить изменения в значения иерархии gameObject, которые затем становятся «туманными», когда мы завершаем игровой режим. Хороший способ избежать этой проблемы — установить «оттенок» в редакторе Unity, чтобы он был наглядно показывал нам, когда мы находимся в режиме Play. Чтобы добавить оттенок в режим воспроизведения, сделайте следующее:     Откройте диалоговое окно настроек Unity, выбрав в меню: File | Preferences ...     Выберите настройки «Colors» и выберите светлый оттенок (в данном случае мы выбрали светло-зеленый):     Закройте диалоговое окно (изменения сохраняются автоматически).     Когда вы в следующий раз войдете в режим Play, вы увидите, что большинство окон редактора Unity становятся зелеными (кроме окон Game и Flowchart):

Создание новой сцены

Чтобы создать новую сцену в Unity, сделайте следующее:     Выберите меню: File | New Scene     Примечание: если у вас есть несохраненные изменения для текущей сцены, вам нужно либо сохранить, либо отказаться от них, прежде чем создать новую сцену.     Теперь у вас должна появиться новая, великолепная сцена, содержащая,  в окне Иерархии(Hierarchy), только один игровой объект — Основную камеру(Main Camera). Новой сцене будет присвоено имя, по умолчанию «Untitled», которое вы можете увидеть в заголовке окна приложения:     Хорошей практикой является сохранение вашей сцены (в нужном месте, с правильным именем) перед созданием вашего шедевра на сцене. Давайте сохраним эту сцену в корне папки нашего проекта «Assets», и назовем ее «demo1». Сначала выберите меню: File | Save Scene As...     Выберите местоположение и имя (мы выбрали папку «Assets» и название сцены «demo1»):     После того, как вы успешно сохранили сцену, вы должны увидеть новый файл сцены «demo1» в папке «Assets» окна «Project». Также вы должны увидеть в заголовке окна приложения, что вы редактируете сцену с именем «demo1»:

Меню: Tools | Fungus

Основные операции с Fungus доступны из меню Unity Tools. Выберите меню: Tools | Fungus, чтобы увидеть доступные варианты: Как видим, есть 2 подменю, Создать(Create) и Утилиты(Utilities), плюс подменю Окно Блок-схемы(Flowchart Window)  (которое раскрывает окно, если оно уже открыто, или открывает новое окно, если окно Flowchart ранее не было открыто).

Меню: Tools | Fungus | Create

Подменю Fungus Tools, Create предлагает следующие действия:

Меню: Tools | Fungus | Utilities

Подменю Fungus Tools, Utilties предлагает следующие действия:

Создать Блок-Схему(Flowchart)

Чтобы создать блок-схему Fungus, сделайте следующее:     Выберите меню: Tools | Fungus | Create Flowchart     Новый gameObject Блок-Схема(Flowchart) должен появиться в окне Иерархии(Hierarchy).     Выберите Блок-Схему(Flowchart) в окне Иерархии(Hierarchy), и вы увидите свойства Блок-Схемы(Flowchart) в окне Инспектор(Inspector):     Если вы не отобразили окно Блок-Схемы(Flowchart), это можно сделать, нажав кнопку «Flowchart Window» в окне Инспектор(Inspector).     Как вы видите, когда создается новый Flowchat, автоматически создается отдельный Блок команд с именем «New Block» с обработчиком событий «Game Started» (он начнет выполнять команды Fungus, когда сцена перейдет в режим Play).

Свойства Блока

Давайте изменим имя команды по умолчанию Блока в окне Блок-Схемы(Flowchart), на «hello». Сделайте следующее:

  1. Создайте новую Fungus Блок-Схему(Flowchart)(если вы этого еще не сделали).
  2. Выбрать Блок в окне Flowchart (при наличии нескольких Блоков, выделенный Блок получает зеленую рамку выделения).
  3. В окне Инспектор(Inspector) измените текст свойства Block Name на «hello». Вы должны увидеть изменение имени блока в окне Блок-Схемы(Flowchart):

Добавить команду

Чтобы добавить команду «Say» в блок, выполните следующие действия:

  1. (настройка) Создайте новую сцену, добавьте к ней Блок-Схему Fungus.
  2. Убедитесь, что блок выбран, и вы можете увидеть его свойства в окне Инспектор(Inspector), и убедитесь, что имя Блока — «hello».
  3. Нажмите кнопку Плюс в нижней половине окна Инспектор(Inspector), чтобы добавить новую команду в свойства блока:

Выберите в меню: Narrative | Say:     Поскольку в этом Блоке есть только одна команда, эта команда выбирается автоматически (отображается зеленым цветом).     В текстовом поле «Story Text» в нижней половине окна Инспектор(Inspector) введите «hello Fugus world»:     Запустите сцену и увидите, как Fungus создает диалоговое окно и выводит текстовое содержимое вашей команды Say:

​Совсем недавно Bolt стал бесплатен. Помимо этого вижу довольно большой спрос на это дело, особенно со стороны геймдизайнеров. Bolt может дать возможность людям создавать небольшие прототипы совсем без кода.

​Поэтому решил начать серию статей про этот инструмент для визуального программирования. В этой речь пойдёт про установку и небольшой пример работы.

Цикл статей

  1. Unity Bolt: #1. Введение
  2. Платформер — движение, анимация, рейкасты

​Туториалы можно скачать бесплатно с Гитхаба. Каждый туториал будет отдельной папкой в проекте. Конкретно этот туториал будет лежать в директории Assets/Tutorials/01 — Intro.

Оглавление

  • Установка.
  • Начинаем работу с графом и узлами.
  • Базовые типы узлов.
    1. Поворот.
    2. Обработка нажатий клавиш и ветвление.
    3. Последовательность.
    4. Физические силы.

Установка

​Для начала нужно установить плагин. Открываем в редакторе Asset Store: Window -> Asset Store (Ctrl + 9). Там находим Bolt и импортируем в проект.

​В проекте появится директория Install Bolt. Нас интересуют файлы Bolt_1_4_12_NET3 и Bolt_1_4_12_NET4. В зависимости от ваших настроек и выбранной версии .NET импортируйте нужный файл. Я всегда выставляю максимальную версию .NET (сейчас это 4.0), поэтому импортирую Bolt_1_4_12_NET4. После импорта сразу появится окно настроек.

​В настройках наименований лучше выбрать Programmer Naming.

​В следующих окнах оставляет всё как есть, Next -> Next -> Generate.

Начинаем работу с графом и узлами

​Создаём пустой GameObject. Будем в него складывать все объекты.

Добавим в него куб.​

​Выбираем объект и в инспекторе добавляем к нему компонент Flow Machine.

​После добавления создаём Macro по кнопке New и выбираем, куда сохранить. После этого нажимаем Edit Graph. Откроется новое окно. Я его всегда прибиваю в нижнюю панель, чтобы можно было удобно видеть в режиме игры и его тоже.

По умолчания сразу создаётся два узла: Start сработает один раз вначале, Update каждый кадр. Start нам пока не нужен, оставим только Update.​

Базовые типы узлов

Поворот

Для начала сделаем что-нибудь простое – заставим кубик вертеться. Добавим ноду, которая будет вращать куб по оси Y.​

​Если запустить, то можно будет увидеть, как всё работает. Значение паметров в узлах можно менять в Play Mode, после выхода они сохраняются.

Обработка нажатий клавиш и ветвление

​Поменяем поведение — сделаем, чтобы вращение было лишь по нажатию на клавишу. Для этого нужно добавить узел Input.GetKeyDown, а от него узел Branch, от которого пойдёт два ответвления (в зависимости от состояния — нажали или нет кнопку).

​И проверим, как оно работает.

​Как видно, при нажатии на Space выполнение идёт по ветке true, что меняет поворот у объекта.

Последовательность

Но нам, к примеру, хочется одновременно какие-то действие производит. Скажем, чтобы куб постоянно вертелся по одной оси, но по другой только по нажатию на клавишу. Для этого используем узел Sequence.​

​Проверим, что всё правильно настроили.

Физические силы

​Сделаем кое-что пореальней – попробуем поработать с физикой. Добавим на сцену объект Plane (правой кнопкой на Objects -> 3D Object -> Plane). Подвинем его в Scene View, чтоб он был под кубиком.

Затем выберем объект Cube в иерархии и в инспекторе добавим на него компонент Rigid Body.​

​Это позволит взаимодействовать с объектами с помощью физики. Теперь немного переделаем граф – вместо поворота добавим объекту импульс.

​Насладимся результатом. Теперь наш кубик может по нажатию на Space, помимо этого постоянно вертится вокруг оси.

Без меню игроку не изменить настройки, не сохраниться или не загрузить прошлый прогресс. Объясняем, как сделать меню в Unity.

Если вы уже немного понимаете, как работать в Unity, и попробовали что-то создать, пора научиться верстать игровые меню. Если нет, прочтите для начала статью о создании игры.

Здесь будут описаны общие моменты, с полной версией проекта можно ознакомиться, скачав его из репозитория на GitHub.

Для создания интерфейсов, в том числе и меню, в Unity используются  UI-объекты. К ним относятся:

  • кнопки;
  • изображения;
  • списки;
  • слайдеры;
  • чекбоксы;
  • выпадающие списки и другие элементы.

Чтобы работать с ними, нужно создать объект Canvas и дать ему понятное название. Например MenuCanvas. Добавьте в него объект Panel и задайте какое-нибудь фоновое изображение или цвет.

После этого можно начинать верстать меню. Создайте внутри MenuCanvasобъект типа Empty и назовите его MainMenu. Внутрь него можно добавить элементы типа Text и Button.

Менять надпись на кнопке можно с помощью вложенного объекта Text. Добавьте их столько, сколько вам необходимо. Затем разместите их на холсте так, чтобы получить что-то вроде этого:

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

Как добавить несколько меню в Unity

Чтобы создать несколько экранов меню, добавьте ещё несколько объектов типа Empty и поместите новые элементы в них. Например, в этом проекте будут созданы SaveMenuLoadMenu и SettingsMenu.

При добавлении объекта он становится активным, поэтому все кнопки и слайды будут просто налезать друг на друга. Чтобы отключить какое-нибудь меню, нажмите на его объект и в Inspector возле его названия уберите галочку.

Этому действию соответствует метод SetActive(), который можно использовать, чтобы переключать меню при нажатии кнопки. Для этого выберите кнопку и в окне Inspector найдите поле On Click ().

В нём описаны действия, которые будут выполняться при клике на кнопку.

На скриншоте показано отключение основного меню и включение меню с сохранениями при нажатии кнопки SaveButton. Сделано всё это без использования кода.

Как создать меню настроек в Unity

Отдельно рассмотрим создание настроек игры. Чтобы реализовать их, нужно сначала сверстать меню с помощью объектов Toggle, Dropbox и Slider:

Дальше создайте скрипт Menu.cs и прикрепите его к MenuCanvas: он будет отвечать за работу со всеми настройками.

В него нужно добавить следующие библиотеки:using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //Работа с интерфейсами using UnityEngine.SceneManagement; //Работа со сценами using UnityEngine.Audio; //Работа с аудио

Затем добавьте эти поля:public bool isOpened = false; //Открыто ли меню public float volume = 0; //Громкость public int quality = 0; //Качество public bool isFullscreen = false; //Полноэкранный режим public AudioMixer audioMixer; //Регулятор громкости public Dropdown resolutionDropdown; //Список с разрешениями для игры private Resolution[] resolutions; //Список доступных разрешений private int currResolutionIndex = 0; //Текущее разрешение

Не забудьте добавить в скрипт выпадающий список и регулятор громкости:

Теперь можно заняться основным функционалом. В первую очередь нужно создать метод, который будет открывать меню в игре.public void ShowHideMenu() { isOpened = !isOpened; GetComponent().enabled = isOpened; //Включение или отключение Canvas. Ещё тут можно использовать метод SetActive() }

Вызываться этот метод будет при нажатии на кнопку Esc:void Update() { if(Input.GetKey(KeyCode.Escape)) { ShowHideMenu(); } }

Дальше нужно создать методы, которые будут вызываться при изменении настроек в меню:public void ChangeVolume(float val) //Изменение звука { volume = val; } public void ChangeResolution(int index) //Изменение разрешения { currResolutionIndex = index; } public void ChangeFullscreenMode(bool val) //Включение или отключение полноэкранного режима { isFullscreen = val; } public void ChangeQuality(int index) //Изменение качества { quality = index; }

Выберите необходимый объект, например, список с уровнями качества, и добавьте обработчик события On Value Changed.

Для этого перетащите объект MenuCanvas и выберите Menu.ChangeQuality. Обратите внимание, что метод указан без скобок. В таком случае значение будет передано ему автоматически. Здесь это индекс выбранного пункта.

Чтобы настройки вступили в силу, нужен ещё один метод:public void SaveSettings() { audioMixer.SetFloat("MasterVolume", volume); //Изменение уровня громкости QualitySettings.SetQualityLevel(quality); //Изменение качества Screen.fullScreen = isFullscreen; //Включение или отключение полноэкранного режима Screen.SetResolution(Screen.resolutions[currResolutionIndex].width, Screen.resolutions[currResolutionIndex].height, isFullscreen); //Изменения разрешения }

Добавьте вызов этого метода при нажатии на кнопку сохранения настроек.

Меню можно улучшить, если сделать автоматическое добавление всех доступных разрешений:resolutionDropdown.ClearOptions(); //Удаление старых пунктов resolutions = Screen.resolutions; //Получение доступных разрешений List options = new List (); //Создание списка со строковыми значениями for(int i = 0; i < resolutions.Length; i++) //Поочерёдная работа с каждым разрешением { string option = resolutions [i].width + " x " + resolutions [i].height; //Создание строки для списка options.Add(option); //Добавление строки в список if(resolutions[i].Equals(Screen.currentResolution)) //Если текущее разрешение равно проверяемому { currResolutionIndex = i; //То получается его индекс } } resolutionDropdown.AddOptions(options); //Добавление элементов в выпадающий список resolutionDropdown.value = currResolutionIndex; //Выделение пункта с текущим разрешением resolutionDropdown.RefreshShownValue(); //Обновление отображаемого значения

Также сюда стоит добавить возможность выхода из игры:public void QuitGame() { Application.Quit(); //Закрытие игры. В редакторе, кончено, она закрыта не будет, поэтому для проверки можно использовать Debug.Log(); }

Или перехода на другую сцену:public void GoToMain() { SceneManager.LoadScene("Menu"); //Переход на сцену с названием Menu }

Теперь остается только функция сохранения.

Как создать сохранение в Unity

Сохранения представляют собой файлы, в которых хранится информация о текущем состоянии игровых объектов:

  • позиции игрока;
  • уровне;
  • мане;
  • здоровье;
  • опыте и так далее.

Чтобы можно было всё это удобно преобразовать в файл, используется сериализация — специальный инструмент, который позволяет сохранить объект в формате JSON или XML. Лучше сохранять всё в виде бинарных файлов, потому что так игроки не смогут изменить характеристики своего персонажа.

Чтобы сохранить данные (координаты, наличие предметов в инвентаре, здоровье), создается класс SaveData:

 [System.Serializable] //Обязательно нужно указать, что класс должен сериализоваться public class SaveData  { //Создание полей с игровыми параметрами public float currHP; public float HP; public float currMP; public float MP; public float currXP; public float XP; public int level; public float[] position; //В Unity позиция игрока записана с помощью класса Vector3, но его нельзя сериализовать. Чтобы обойти эту проблему, данные о позиции будут помещены в массив типа float. public SaveData(Character character) //Конструктор класса { //Получение данных, которые нужно сохранить HP = character.HP; currHP = character.currHP; MP = character.MP; currMP = character.currMP; XP = character.XP; currXP = character.currXP; level = character.level; position = new float[3] //Получение позиции { character.transform.position.x, character.transform.position.y, character.transform.position.z }; } }  

Теперь понадобится дополнительный класс, который будет отвечать за сохранение и загрузку данных:

 using UnityEngine; using System.IO; //Библиотек для работы с файлами using System.Runtime.Serialization.Formatters.Binary; //Библиотека для работы бинарной сериализацией public static class SaveLoad //Создание статичного класса позволит использовать методы без объявления его экземпляров { private static string path = Application.persistentDataPath + "/gamesave.skillbox"; //Путь к сохранению. Вы можете использовать любое расширение private static BinaryFormatter formatter = new BinaryFormatter(); //Создание сериализатора  public static void SaveGame(Character character) //Метод для сохранения { FileStream fs = new FileStream (path, FileMode.Create); //Создание файлового потока SaveData data = new SaveData(character); //Получение данных formatter.Serialize(fs, data); //Сериализация данных fs.Close(); //Закрытие потока } public static SaveData LoadGame() //Метод загрузки { if(File.Exists(path)) { //Проверка существования файла сохранения FileStream fs = new FileStream(path, FileMode.Open); //Открытие потока SaveData data = formatter.Deserialize(fs) as SaveData; //Получение данных fs.Close(); //Закрытие потока return data; //Возвращение данных }  else  { return null; //Если файл не существует, будет возвращено null } } } 

Созданные методы будут вызываться из класса Character:

 public void LoadCharacter() { SaveData data = SaveLoad.LoadGame(); //Получение данных if(!data.Equals(null)) //Если данные есть { HP = data.HP; currHP = data.currHP; MP = data.MP; currMP = data.currMP; XP = data.XP; currXP = data.currXP; level = data.level; currHP = data.currHP; transform.position = new Vector3(data.position[0], data.position[1], data.position[2]); } } 

Можно проверять:

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

Заключение

Полученных из статьи знаний хватит, чтобы создавать другие интерфейсы в игре:

  • полосы здоровья;
  • уровень персонажа;
  • меню паузы.

Не запускается Unity?

Алгоритм прост.

Шаг 1. Создать в интерфейсе игры кнопку-крестик, клик по которой должен закрывать игру.

Дополнительно, если это необходимо, можно также продумать нажатие определённой клавиши (для десктопных игр).

Шаг 2. Создать скрипт с вызовом функции UnityEngine, закрывающей приложение

Это функция (метод) Quit() из класса Application. Подробнее о нём можно узнать из официальной документации.

Там же дан удачный пример реализации скрипта закрытия приложения по нажатию на клавишу Esc:

  using UnityEngine;  using System.Collections;    // Quits the player when the user hits escape    public class ExampleClass : MonoBehaviour  {     void Update()     {        if (Input.GetKey("escape"))  // если нажата клавиша Esc (Escape)        {           Application.Quit();    // закрыть приложение        }     }  }  

Всего одну аналогичную строку необходимо вписать также и в функцию, которая будет срабатывать по нажатию на кнопку-крестик интерфейса.

Шаг 3. Прикрепить скрипт к необходимому объекту.

В случае использования кнопки-крестика, назначить вызов функции по клику по этой кнопке.

15 апреля 2021 Лучший способ заняться игровым дизайном – сразу же начать. Разбираемся, как сделать собственный уровень при помощи готового пакета 2D Game Kit и на его примере изучаем создание игр в Unity. Обсудить image
2D Game Kit

Приступим.

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

image
Unity Hub

Для начала нужно скачать и установить Unity Hub – это лаунчер, который упрощает управление проектами и версиями Unity. Затем придется зарегистрироваться в экосистеме и создать Unity ID. Выберите лицензию Personal (персональную) и отметьте галочкой подходящий вариант применения: Unity позволяет использовать движок бесплатно для некоммерческих целей, а также компаниям с годовым доходом меньше $100 000.

image

После активации лицензии можно установить последнюю LTS-версию Unity с необходимыми параметрами из раздела Installs. Выберите платформы, на которых должна запускаться игра, и дождитесь окончания инсталляции.

image

N.B. На слабых машинах процесс может занять довольно длительное время – запаситесь печеньками и кофе.

image

Когда Unity уже установлена, нужно создавать проект. Вы можете взять его из раздела Learn, выбрав там 2D Game Kit или добавив его в ваши Assets на сайте (не забудьте предварительно залогиниться под своим Unity ID).

image
image

Создание новой сцены и карты уровня

2D Game Kit позволяет автоматически создать новую сцену по умолчанию. Она уже содержит персонажа Эллен, небольшую платформу, интерфейс здоровья, а также все нужное для передвижения и атаки. Для этого откройте проект и выберите раздел Kit Tools –> Create New Scene в верхнем меню.

image

2D Game Kit использует функцию Tilemap в Unity, которая поможет быстро и легко нарисовать уровень. Все уже настроено, так что можно сразу приступить к работе. В верхнем меню выберите Window –> 2D –> Tile Palette, и у вас откроются две палитры плиток, которые позволяют рисовать уровни.

Разработчику доступно два стиля спрайтов Grassy Rocks и Alien Structure. Выберите тот, который больше нравится, и начните рисовать карту. Визуальные инструменты похожи на обычный графический редактор, так что проблем с ними не возникнет. Блоки можно рисовать, редактировать или стирать.

Когда карта будет готова, можно сразу перейти в окно Game визуального редактора и нажать Play, чтобы посмотреть результат. Управление классическое: A, D, S, Space для прыжка. O, K – выбор оружия.

Двери и движущиеся платформы

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

Мы можем перетащить ее в любое место. Путь платформы можно сделать сложнее, заставив ее двигаться по кругу. Для этого нужно воспользоваться кнопкой Add Node в окне инспектора, который находится справа. Добавьте несколько точек-нод и соедините их, сменив флажок BACK_FORTH на LOOP в строке Looping инспектора панели. Стоит обратить внимание, что большая часть свойств всех игровых объектов меняется в инспекторе.

Попробуем также добавить дверь: на ее примере мы разберемся, как настраивать взаимосвязь между сценариями разных объектов. Находим ее там же в разделе Prefabs –> Interactables и перетаскиваем в редактор.

Чтобы открыть дверь, добавим нажимную панель на полу: она обозначена как Pressure Pad. В инспекторе панели найдем раздел Pressure Pad (Script), в одном из окон которого есть раздел On Pressed (). Добавим там новое действие при нажатии Runtime Only и в открывшееся поле перетащим из иерархии сцены нашу дверь, которая Door.

Теперь в соседнем окне с надписью No Function выберем из выпадающего списка Animator –> Play (string). Напишем в появившемся поле DoorOpening. Это готовый скрипт для из раздела Art –> Animations –> AnimationClips –> Interactables со сценариями для существующих объектов.

Телепортация

Персонажа можно телепортировать из одной области сцены в другую или между разными уровнями. Добавим к уровеню два телепорта.

В настройках телепорта мы видим раздел Transition Point (Script), в котором в соответствующих окнах можно выбрать телепортируемый объект (в нашем случае Elen) и тип телепортации (Same Scene), перетащить из раздела иерархии точку назначения в Destination Transform (это будет второй телепорт), а также указать условие перемещения – при входе (On Trigger Enter) или при нажатии кнопки действия (E Interact Pressed). Также телепортироваться можно в другие сцены, например, для перехода между уровнями игры через настройку TransitionDestination, которая находится в Scene Control.

Враги

У нас есть два готовых врага в наборе: Chomper и Spitter. Их можно найти в окне проекта в Prefabs –> Enemies.

Оба они контролируются компонентом Enemy Behavior в инспекторе. Вы можете использовать этот компонент для настройки таких свойств, как скорость врага, поле зрения (FOV), здоровье и многое другое. Добавив одного из них в сцену, можно поменять настройки обнаружения персонажа, дальность и угол зрения, скорость движения и реакции.

Урон и украшения

За нанесения урона у нас отвечает функция Damager, ее можно прикрутить к любому игровому объекту и настроить на свое усмотрение. Добавим падающий ящик, который персонаж будет сбрасывать на врагов.

Перетащив ящик на сцену, нажимаем в инспекторе Add Component и добавляем Damager. Первоначально он не будет совпадать с силуэтом ящика, поэтому его нужно вручную подогнать под размер объекта. Также зададим размер наносимого урона, а в разделе HittableLayers укажем врагов в качестве цели, чтобы случайно не повредить себя.

Рекомендуем также создать пустой объект в самом низу сцены по всей ее длине и добавить в него Damager, чтобы реализовать механизм смерти игрока при падении. В противном случае Elen будет бесконечно падать вниз, что не особенно логично.

В разделе проекта Art –> Sprites –> Environment есть множество украшений, которые можно добавить в сцену. Пакет 2D Game Kit вообще содержит кучу готовых кастомизируемых объектов. Поскольку Unity поддерживает импорт собственных спрайтов, изображений и объектов, простор для фантазии почти безграничен.

Сборка игры

Будем считать, что сцена уже готова и вы хотите протестировать ее вне редактора в виде отдельной игры. Чтобы не добавлять в проект созданные по умолчанию в 2D Game Kit сцены, стоит слегка изменить стартовые настройки. Их можно найти в разделе Scenes под названием Start. Откройте в редакторе объект TransitionStart, и выберете свою сцену в строке New Scene Name.

Теперь при нажатии Start игрок сразу попадает в вашу сцену, минуя предустановленные уровни.

Перейдем в меню работы с файлами к разделу Build Settings, где нужно выбрать необходимые сцены: Start, UIMenus, Loading и созданная вами. Ниже мы выбираем платформу, под которую будем собирать проект (при необходимости можно добавить поддержку требуемой архитектуры). Проверьте или измените настройки в разделе Player Settings и нажмите Build. Выберите папку назначения и дождитесь окончания сборки.

Игра готова, можно тестировать и делиться ею с друзьями.

Заключение

Мы лишь познакомили читателей с основами интерфейса Unity на примере комплекта 2D Game Kit. Более подробные руководства на английском языке легко найти в соответствующем разделе официального сайта Unity. Также рекомендуем ознакомится с инструкцией по созданию 2D пин-понга на Unity.

***

Надеемся, этот материал помог вам разобраться с интерфейсом движка и воодушевил на развитие в области геймдева. Если вы только начинаете изучать эту интересную индустрию, стоит обратить внимание на курс факультета разработки игр на Unity онлайн-университета Geekbrains. В нем уделяется большое внимание практике, а студенты в процессе обучения реализуют 2D- и 3D-игры разных жанров для ПК и смартфонов. С таким багажом можно идти на собеседование с потенциальным работодателем, тем более университет предлагает студентам бесплатные карьерные консультации и помогает подобрать соответствующие их навыкам вакансии.

Интересно, хочу попробовать

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Максим Коновалов
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий