Предисловие
Привет Хабр! С вами Евгений «Nage», и сегодня мы начнем цикл статей, по Змейке в Unity3D. В
пилотной статье мы посмотрели как можно реализовать игру в консоли, теперь перейдем к игровому движку.
Статьи будут преследовать 2 цели:
Во первых, для новичков, показать разработку игры от начала и относительно до конца, стараясь написать максимально масштабируемый и поддерживаемый код.
Во вторых, для меня, непрофессионала, получить советы/критику по коду и реализации в целом.
И так, пора начинать:)
Оглавление:
Змейка&Unity Часть 1.
Глава 1. Начало начал
Для работы нам понадобиться: Unity3D 2017.3, любой редактор кода, я предпочитаю Visual Studio 2017, и ваш любимый графический редактор, я использовал бесплатный krita.
Определимся с графикой, я выбрал простой pixel-art, размер изображений 24х24. Поле будет состоять из тайлов, поэтому нам понадобится 2 монотонных изображения, препятствия, например в виде камней, несколько типов еды, голова и тело змеи, и изображение кнопки для интерфейса. После некоторого времени за поиском материала и творчеством получился вот такой набор спрайтов
Теперь посмотрим как нарезать изображение на те самые спрайты в Unity, закинем картинку в новый проект, который мы конечно уже создали. В инспекторе выставляем Filter mode — Point, это фильтр без сглаживания, что бы был виден каждый пиксель спрайта, и Sprite mode — Multiple, значит что наша текстура содержит несколько спрайтов. И так заходим в Sprite Editor
Здесь нажимаем Slice, и выбираем Type — Grid By Cell Size, и выставляем Pixel Size — 24x24
получаем сетку в 24 пикселя, и кнопку разрезанную на 4 части, просто удалим 3 из них и растянем первую на всю кнопку, и получаем все нужные нам спрайты. Стоит сразу переименовать каждый спрайт для удобства.
Глава 2. Обзор местности
Создадим игровое поле, для этого нам нужно создать сетку с тайлами — Create/2D Object/Tilemap. Так же надо создать палитру, что бы открыть окно палитры выберем в меню Window/Tile Palette. Нажимаем Create New Palette — Create, и нас попросят выбрать куда сохранить палитру.
Отлично! Теперь в меню Active Tilemap можно выбрать Tilemap на котором будем рисовать.
Перетащим спрайт из нашей текстурки в палитру, и нам предложат сохранить тайл.
Теперь можно рисовать тайлами по сетке, сделаем это в шахматном порядке.
Напишем маленький класс Bound, который будет считать границы нашего поля
using UnityEngine;
using UnityEngine.Tilemaps;
public class Bound : MonoBehaviour {
[SerializeField] private Tilemap tile;
private BoundsInt bounds;
public static int Right;
public static int Left ;
public static int Up ;
public static int Down ;
private void Awake() {
bounds = tile.cellBounds;
Right = bounds.size.x + bounds.position.x - 1;
Left = bounds.position.x;
Up = bounds.size.y + bounds.position.y - 1;
Down = bounds.position.y;
}
}
В инспекторе вешаем скрипт на Grid и перетаскиваем наш Tilemap в поле, теперь можно пользоваться значениями, например для пределов где спавнится еда.
Важно!
На данный момент Tilemap работает плохо, сразу рисуйте поле в нужный размер, а то значения будут не верными, если вы поставите лишний тайл и потом удалите его. cellBounds возвращает размеры прямоугольника, который когда либо существовал.
Например, вы нарисовали поле 5х10, и случайно поставили лишний квадратик в точке (0,-1), а потом удалили его. И было бы логично предполагать, что метод вернет координаты (0,0) и размер 5х10, но нет, он вернет (0,-1) и 5х11.
Глава 3. Главное меню
Сохраним сцену под названием LvL0, и создадим новую, для главного меню. Нам понадобится просто beckground и 2 кнопки, «New game» и «Exit». Должно получиться что то такое
напишем класс для этих кнопок
using UnityEngine;
using UnityEngine.SceneManagement;
public class ButtonManager : MonoBehaviour {
public void LoadScene(string newGameLvl) {
SceneManager.LoadScene(newGameLvl);
}
public void ExitBtn() {
Application.Quit();
}
}
тут все просто, один метод загружает сцену по ее названию, второй метод закрывает приложение. Вешаем скрипт на Canvas, затем в кнопке, в блоке On Click() нажимает + и перетаскиваем Canvas в место для объекта. В правом выпадающем меню выбираем метод. Для New game выбираем LoadScene и вписываем название нашей сцены LvL0, для Exit выбираем ExitBtn.
Заключение
Маленькая подготовительная часть закончена, сделали графику игры, основное поле действия и меню. В следующей статье сделаем главную часть — саму змею. Всем удачи :)
комментарии (1)