Для более детально изучения основных возможностей построения платформенной игры в среде Юнити pro, нужно понимать общее понятие сути платформера.
Платформер (Platformer) – направление компьютерных игр определённого жанра, основной сюжетной линией является прыгание по платформам, взбирание по лестницам, а так же сбор необходимых предметов для завершения уровня. Некоторые с предметов могут наделять персонажей особыми навыками, примеры:
- Сила удара;
- Защитный щит;
- Огромные прыжки и скорость.
В таких сюжетах встречаются противники созданного героя, они в основном наделены примитивным искусственным интеллектом. Количество, так называемых врагов, встречается разное, это зависит от сложности уровней и сюжет игры. Влияние на показатели жизнеспособности и навыков, собранных главным персонажем на протяжении отведённого времени, осуществляется на уровне соприкосновения или уничтожения.
Уровни, как правило, разбиты на сектора со скрытыми подходами в стенах или высокими, труднодоступными местами. Такого рода ступени игры характерны нереалистичностью и рисованной графикой.
Что бы закрепить и лучше усвоить информацию, создадим игру для системы Android.
Оглавление:
Предварительная настройка под Android
Перед тем как уже сформирована суть и есть примерные наброски сюжета нужно сделать вход и настройку системы:
- Запускаем приложение Unity 3D, нажатием на ярлык рабочего стола;
- В появившемся окне выбираем «New Project», прописываем имя проекта, обязательно выбираем локацию для сохранения, ставим отметку напротив модуля 2Д и нажимаем кнопку «Create Project»;
- При открытии рабочей области, если такие модули как Иерархия, Инспектор или тому подобное имеют не удобное расположение, можно их передвинуть, нажав ПКМ и перетащив;
- Далее выбираем File (Файл) – Build Setting, если выбираемый проект компилируется под файловые системы типа Windows, MAC и т.п., то выбираем Android и нажимаем «Switch Platform»;
- В окне Project необходимо создать папку «Scenes», в которой будут содержаться все уровни, создаваемые пользователем;
- Заходим в меню Файл, выбираем Save Scene as.. и сохраняем сцену в созданную папку, таким образом, будет сохранён проект, с которым ведётся работа, и в случае выхода с Юнити всегда можно вернуться к той части, на которой ранее остановились.
Поиск и подготовка компонентов
Следующим будет поиск в сети Интернет понравившееся картинки главного персонажа и платформы, и шагаем вперёд:
- Создадим в окне Project папку «Sprites», все картинки в играх, причём в 2Д играх, называются Спрайтами;
- Копируем выбранные ранее изображения в эту папку, и больше не каких манипуляций по настройкам с ними не делаем;
- Перетягиваем пейдж героя и основу платформы в область сцены, так как они отображаются непропорционально, нужно их проредактировать:
- Кликаем по персонажу героя;
- В компоненте Инспектор, а именно Трансформере выставляем значения «Scale» таким образом, что бы выровнять пропорции по отношению к платформе;
- Далее корректируем камеру, находим в окне Иерархии Main Camera и в компонентах Size проставляем число приемлемое для просмотра, например 8, а также выставляем дальность камеры в пределах 100, это значение проставляем в строке Far;
- После добавляем к персонажу Box Collider 2D, нажимая на кнопку «Add Component» и выставляем коллайдер по его размерам. Размер проставки желательно сделать в половину персонажа, так как будут применены другие коллайдеры. Отметим, что компоненты добавляются только 2Д, так как игра создаётся именно в этом формате;
- Добавляем Circle Collider 2D, он поможет в дальнейшем взбираться герою на разные поверхности, его тоже располагаем по размеру и не много ниже Box Collider;
- Не забываем о силе тяжести, добавим Rigidbody 2D, это значит, что спрайт попадает под контроль физического механизма.
Обучение процесса перемещений
Для того, что бы можно было управлять функционалом героя, нужно заранее сделать обучение. Тут понадобиться:
- Создание папки Scripts, сюда добавим С# Script, под названием «PlayerControl»;
- Перемещаем скрипт на игрока, он отобразится в окне Инспектор;
- Двойным нажатием по скрипту заходим в текстовый редактор и начинаем корректировку, прописываем несколько переменных:
- Первая public float, указываем значение speed = 20 ft, это скорость с которой будет двигаться объект;
- Вторая private Rigidbody2D rb, это связующая переменная для компонента Rigidbody, он будет стартовать при запуске игры и эго нужно присвоить как rb = GetComponent <Rigidbody2D> ();
- Теперь задаём параметры для движения, в зависимости от того в какую сторону будет производиться движение. Для этого создаём новую переменную float moveX = Input.GetAxis («Horizontal»). Это означает, что при выборе движения персонаж будет плавно передвигаться в заданную сторону;
- Теперь необходимо именно двигать игрока, здесь используем rb с использованием функции MovePosition с подстановкой изначальной позиции объекта: rb.MovePosition (rb.position + Vector2.right * moveX * speed * Time.deltaTime).
- Внеся все значения можно просмотреть, что из этого вышло, нажав на кнопку Play.
Важно при просмотре в компоненте Rigidbody 2D выставить заморозку вращения, здесь заходим в строку «Constants» и ставим отметку на «Freeze Rotation». Так же выставляем значение гравитации «Gravity Scale» примерно 20 единиц и в меню Edit – Project Settings – Physics 2D по Y значение -20.
Обучение процесса прыжков и вид сопровождение камеры
Что бы задать движения в виде прыжков, нужно зайти в тот же текстовый редактор, где заданы значения перемещений, и прописать:
- Добавляем новую проверку if (Input.GetKeyDown) (KeyCode.Space)), таким образом задана клавиша Spaces (Пробел) для привода прыжка;
- Следующее значение задаст силу толчка rb.AddForce (Vector2.up * 8000).
Созданный персонаж запрограммирован на перемещение и прыжки, но есть проблема, камера стоит в одном положении и не как не двигается за игроком. Решение этой задачи в следующем:
- В папку скриптов добавляем новый скрипт под названием «CamMove» и перетянуть его в область Иерархии на Main Camera;
- Двойным нажатием на скрипт в Инспекторе открываем окно текстового редактора, по умолчанию там проставлены две библиотеки, с которыми не будет связана работа, и прописываем переменную public GameObject Player. Данная установка даёт возможность всегда следить за игроком в игровом пространстве;
- Указываем параметры позиции для камеры transform.position = new Vector3 (player.transform.position.x, player.transform.position.y, -10ft);
-10ft выставляется для значения Z, что бы герой не вращался в пространстве.
- Теперь кликаем на Main Camera и перетаскиваем ссылку на игрока к скрипту Cam Move.
Что бы объект ни перемещался по одной платформе, её стоит продублировать:
- Создаём папку под названием «Prifabs»;
- Копируем в неё, с помощью перетягивания, платформу.
Таким простым способом созданный прифаб можно копировать, создавая большее игровое пространство и увеличивая уровни сложности. Для клонирования выполняется комбинация Ctrl+D.
Создание точки старта
При компоновке всех частей созданного проекта, иногда возникает вопрос с обратным прохождением уровней с определённой точки. Это так называемая точка старта, откуда игрок, может восстановиться и продолжить игру. Если не задать таких параметров, то предмет, например, в случаи падения с платформы, может падать бесконечно. Для её создания понадобится:
- Создаём новый пустой объект под названием «Respawn», это точка, при которой игрок будет появляться в случае проигрыша;
- Задаём точные координаты персонажа в компоненте Трансформ. Для удобства можно пометить точку иконкой, что бы было понятно от куда начинать;
- Далее создадим 3Д модель Куб и присвоим название DieSpace, здесь же в Инспекторе удаляем компоненты Mesh-фильтра, оставим только Box Collider, но выбираем Box Collider 2D. Коллайдер растягиваем по Х и Y с перемещением на то место, где будет считаться, что игрок проиграл;
Закрепить созданную точку нужно с помощью скрипта:
-
- В папке скриптов создадим файл с названием DieSpace и перемещаем его на коллайдер;
- Двойным нажатием открываем редактор, и удаляем две не нужные библиотеки в начале и после;
- Прописываем переменную public GameObject respawn и функцию:
- void OnTriggerEnter2D (Collider2D other);
- if (other.tag == «Player»);
- transform.position = respawn.transform.position.
- Открываем Юнити и проверяем через запуск Игрового режима правильность заданных параметров.
В заключении можно выделить то, что созданный 2Д платформер работает. Здесь нет сложного сюжета, но представлены базовые возможности:
- Персонаж может двигаться и прыгать;
- Установлены платформы, на которых происходит игровой процесс;
Есть точки возобновления и проигрыша.