Как сделать спрайт в юнити

Спрайты в Unity: определение, как их создавать и использовать

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити

Как создать спрайт для Unity? Для этого в игровом движке предусмотрены свои инструменты, о которых мы поговорим чуть ниже.

В Unity работа со спрайтами внедрена по умолчанию, когда движок настроен на разработку 2D-игр. Если спрайт посмотреть в 3D-режиме, тогда он окажется «плоским», как лист бумаги. Все потому, что спрайт — это 2D-объект и у него нет Z-ширины.

Как создать спрайт для Unity

Когда на Unity создается новый спрайт, ему необходимо задать текстуру. Текстура — это изображение, которое отражает внешний вид спрайта. Такое изображение прикрепляется к спрайту, создавая GameObject, который можно использовать в игре.

Если нет возможности сразу добавить текстуру в проект, но наличие спрайта в игре вам обязательно, тогда можно применить «заполнитель спрайтов» на Unity. Заполнитель — это встроенный инструмент, который создает спрайт в виде простых геометрических фигур типа треугольника, квадрата, круга и заполняет их белым цветом. В дальнейшем всегда будет доступно редактирование «заполнителя».

Assets → Create → Sprites

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

Редактирование спрайтов в Unity

Создать спрайт для Unity несложно, как это делается — описано чуть выше. Вся сложность заключается в редактировании спрайта. Чем сложнее игровой спрайт и сложнее проект, тем труднее будет редактировать спрайт.

Найти кнопку «Sprite Editor». Вам откроется редактор спрайтов, в котором будет несколько доступных инструментов. Например : изменение масштаба, изменение расцветки, изменение местоположения спрайта на экране, поворот спрайта, настроить прозрачность, обрезать и др.

Средство визуализации спрайтов в Unity

Отобразить спрайт в Unity помогает компонент Sprite Renderer. Его нужно добавлять в GameObject через меню Components:

Components → Rendering → Sprite Renderer

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

Заключение

Как создать спрайт для Unity? Добавить спрайт в Unity несложно. Спрайт — это анимированная картинка, состоящая из множества кадров. О подготовке спрайта для Unity нужно позаботит ь ся заранее. Благо для этого есть много программ. Например:

Источник

Как сделать спрайт в юнити

Импортирование 2D-ресурсов в Unity

В этом уроке вы научитесь импортировать 2D-ассеты в Юнити, чтобы создать спрайты как из одного изображения, так и из таблицы спрайтов (атлас спрайта), содержащей несколько ассетов, которые вы настроите в редакторе спрайтов.

1. Подготовка 2D-ресурсов изображений для импортирования в Юнити

Импортирование двумерных ассетов, известных как спрайты, в Unity относительно простой и легкий процесс.

Существует несколько шагов, которые можно предпринять, чтобы сделать импортирование, поиск и использование спрайтов в Юнити намного легче. Хотя их можно сохранять где угодно в основной папке Assets, мы рекомендуем создавать в Assets папку только для спрайтов и в ней размещать подпапки, организованные по сценам, персонажам или любой другой организационной структуре, подходящей для вашего проекта.

Unity может импортировать 2D-ресурсы либо в виде отдельных файлов, где каждый элемент пользовательского интерфейса или кадр анимации представляет собой отдельный файл, либо как множество ресурсов, сгруппированных в одно изображение (часто называемое Sprite Sheet — таблицей спрайтов или Sprite Atlas — атласом спрайтов).

Примечание. Атлас спрайтов — это изображение, содержащее набор непоследовательных спрайтов, в то время как таблица спрайтов — это изображение, содержащие последовательные спрайты, обычно используемые для анимации.
При работе с редактором спрайтов следует учитывать несколько важных моментов. Таблица спрайтов должна иметь размер, равный степени 2 (512 * 512, 1024 * 512, 1024 * 1024 и т.д.), чтобы избежать проблем с таблицами неправильного размера. Также для правильной работы в Unity у таблицы спрайтов должен быть параметр Sprite Mode со значением Multiple. Если установлено значение Single, вы не сможете использовать функции редактора спрайтов.

Один из способов автоматизировать присвоение имен длинным последовательностям кадров анимации — сохранять кадры вместе по порядку в таблице спрайтов, содержащей только эту анимацию.

В приведенном выше примере вы назвали бы изображение Player_Barbarian_Walk_North_ и использовали бы редактор спрайтов, описанный далее в этом рабочем процессе, чтобы автоматически нарезать и присвоить названия спрайтам.

Большинство инструментов анимации могут экспортировать таблицы спрайтов, а их тщательная организация и присвоение имен могут автоматизировать настройку спрайтов в Unity.

Другой случай, когда вы можете хранить отдельные элементы на одном листе, — это компоновка спрайтов для тайловых карт. Для получения дополнительной информации о тайловых картах смотрите урок «Введение в тайловые карты Unity».

2. Импортирование одного спрайта

При импортировании одного спрайта Юнити назовет этот спрайт именем файла изображения. Например, Hamburger.png станет Hamburger. Создайте или откройте 2D-проект в Unity и поместите спрайт (Рисунок 1) в окно Project, или где-нибудь внутри Assets используя проводник Windows (или Finder на Mac).

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнитиРисунок 1: Пример спрайта, увеличен для наглядности

Нажмите на только что импортированный спрайт в окне Project, чтобы открыть инспектор для настроек импорта (Рисунок 2).

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнитиРисунок 2: Параметры импорта по умолчанию для спрайтов. Обязательно примените изменения, которые делаете для настроек, нажав на Apply в правом нижнем углу. Если вы забудете это сделать, то Unity предложит применить изменения.

Для большинства задач важны следующие параметры:

Pixels Per Unit: Определяет сколько Unity единиц в размере спрайта. Обычно это число будет одинаковым для всех спрайтов в проекте. В большинстве случаев вы будете выбирать это число перед созданием ассетов, так как этот параметр указывает относительный масштаб спрайтов относительно друг друга, мира, и ортогональной камеры.

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

Этот параметр полезен, если вы создаете игровой мир на основе тайлов; параметр Pixels Per Unit равный размеру одной единицы мира облегчает быстрое построение миров, удерживая клавишу Ctrl (Command на Mac), чтобы двигать их на одну единицу за раз.

Еще одна особенность, которую стоит учитывать при настройке Pixels Per Unit — какая часть мира должна быть видимой на экране. Именно здесь параметр Pixels Per Unit имеет важность вместе с размером (ортогональной) камеры.

Для игры-приключения в стиле ретро можно было бы сделать спрайты 16×16, установив параметр Pixels Per Unit на 16. Размер ортогональной камеры — половина вертикального размера экрана в единица Unity. Чтобы сделать игровой миры высотой 244 пикселей на экране, разделите половину 224 (112) на 16, чтобы получить размер ортографической камеры (в данном случае 7).

Pivot: опору можно рассматривать как точку привязки спрайта. Чтобы сталактит свисал с потолка нужно установить его pivot на значение Top, а его позицию установить как у потолка. Для любого персонажа или элемента декора, который должен стоять на земле, обычно устанавливается значение Bottom. Существует 10 вариантов поворота: любое из трех горизонтальных положений (центр и края) в сочетании с любым из трех вертикальных положений или настраиваемый поворот, указанный в диапазоне 0–1 в обоих измерениях. Центр установлен по умолчанию и подходит для многих целей.

Filter Mode: Определяет визуальное качество спрайтов. Возможные настройки: Point (без фильтра), Bilinear и Trilinear. В режиме Point, вместо интерполяции между исходными пикселями, пиксели повторяются или пропускаются, чтобы спрайт выглядел больше или меньше. Bilinear — это 2D-сглаживание, которое полезно для элементов с высоким разрешением или на основе фотоизображений. Trilinear переходы между MIP-картами, которые обычно не используются для 2D-элементов.

3. Импортирование и настройка нескольких спрайтов в одно изображение при помощи Sprite Editor

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

Создайте или скачайте изображение с несколькими спрайтами и импортируйте его в проект (Рисунок 3).

Настройки для параметра Type следующие:

Automatic: Редактор спрайтов определяет области, которые окружены прозрачностью, и назначает их как спрайты.

Grid By Cell Size: Сетка нарезается равномерно с указанием пользователем размера каждой ячейки. Это наиболее распространенный параметр при построении проектов на основе тайлов, или проекты, в которых большая часть или вся область спрайтов на листе одинакового размера (например, значки или другие унифицированные элементы интерфейса, или строительные блоки игрового мира).

Grid By Cell Count: Сетка нарезается равномерно с указанием пользователем количества строк и столбцов спрайтов. Можно использовать этот параметр вместо Grid By Cell Size, если таблица спрайтов была сгенерирована программой, в которой вы уже определили количество строк и столбцов.

Cell Size: определяется либо Pixel Size, либо количеством Column и Row, в зависимости от того, какой неавтоматический параметр вы выбираете.

Offset: позволяет вам отметить начальный (слева сверху) угол в таблице спрайтов, и бывает полезным в ситуациях, когда спрайты разделены сеткой.

Padding: позволяет указать буфер между спрайтами, опять же, полезно для спрайтов, разделенных сеткой.

Keep Empty Rects: определяет спрайт даже если в нем нет изображения в автоматически сгенерированной области, при нарезке по размеру ячейки или количеству.

Pivot: определяет опорную точку спрайта. Например, спрайт с параметром Pivot, у которого установлено значение Center (по умолчанию), будет центрировано вокруг исходной точки, если для его позиции устанавливаются значения 0, 0, 0.

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

Если вам понравился урок, то вы можете добавить его в закладки социальных сетей (значки снизу), чтобы сохранить новые знания.

Источник

Разработка вашей первой игры с помощью Unity и C#. Часть 2

Продукты и технологии:

В статье рассматриваются:

В первой статье я рассказал о некоторых основах и об архитектуре Unity. В этой статье я намерен исследовать работу с двухмерной графикой в Unity, которая опирается на поддержку двухмерной графики (далее для краткости 2D) в Unity, добавленную в версии 4.3. Вы могли работать с такой графикой и в Unity до версии 4.3, но этот процесс был весьма тяжелый без стороннего инструментария. Я хочу просто перетаскивать изображения в свою сцену, после чего она должна появляться в ней и работать, как ожидалось. Это как раз часть того, что предлагается в Unity 4.3, и в этой статье я рассмотрю другие возможности, разрабатывая базовую двухмерную игру-аркаду, что позволит вам освоить некоторые значимые концепции Unity.

2D в Unity

Чтобы получить поддержку 2D в Unity при создании нового проекта, выберите 2D из раскрывающегося списка в диалоге создания нового проекта. После этого все свойства проекта по умолчанию подстраиваются под 2D (можно увидеть в Edit | Project Settings | Editor), и любые изображения, импортируемые в ваш проект, становятся спрайтами, а не просто текстурами. (Об этом я расскажу подробнее в следующем разделе.) Кроме того, представление сцены переключается по умолчанию в режим 2D. На самом деле в этом режиме просто предоставляется вспомогательная кнопка, которая фиксирует две оси при разработке сцены, но никак не влияет на саму игру. Вы можете щелкнуть ее в любой момент, чтобы войти в режим 2D или выйти из него. 2D-игра в Unity реально остается 3D-средой — просто ваша работа ограничивается осями X и Y. На рис. 1 и 2 показаны варианты с выбранным режимом 2D и без него. Я выделил камеру, чтобы вы видели контуры области просмотра камеры, но она смотрит в пространство как фигура прямоугольной формы.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 1. Режим 2D выбран — камера имеет фокус

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 2. Режим 2D не выбран — камера имеет фокус

2D-игра в Unity реально остается 3D-средой — просто ваша работа ограничивается осями X и Y.

Выделенная камера настроена как прямоугольная (orthographic camera) — это один из двух режимов камеры в Unity. Этот тип камеры, широко применяемый в 2D, не масштабирует объекты, отстоящие дальше от ваших глаз, т. е. нет глубины от позиции камеры. Другой тип камеры — перспектива (perspective), которая показывает объекты так, как их видят ваши глаза, с глубиной. Причин использовать каждый из типов камеры много, но, как правило, следует выбирать перспективу, когда требуется визуальная глубина, если только вы не хотите соответственно масштабировать свои объекты. Вы можете сменить тип камеры, просто выбрав камеру и изменив тип проекции. Советую опробовать это и посмотреть, как изменяется область просмотра вашей камеры, когда вы начинаете смещать объекты дальше от глаз по оси Z. Режим по умолчанию можно сменить в любой момент, что повлияет только на изображения, которые будут потом импортироваться в ваш проект.

Когда по умолчанию выбран режим 3D, изображения распознаются как тип Texture.

Если у вас есть существующий проект в Unity или если вы не уверены, выбран ли режим 2D в диалоге проекта, то можете задать свойствам проекта значения по умолчанию для 2D через Edit | Project Settings | Editor; иначе вам придется вручную задавать тип каждого импортируемого вами 2D-изображения, что несколько утомительно при большом количестве изображений.

Все дело в спрайте

Когда по умолчанию выбран режим 3D, изображения распознаются как тип Texture. Перетащить текстуру в сцену нельзя; текстура должна быть применена к какому-то объекту. Создавать 2D-игры таким путем вовсе не забавно. Я хочу просто перетаскивать изображения, чтобы они появлялись в моей сцене. Однако, если режим по умолчанию — 2D, все становится проще. Теперь, когда я перетаскиваю изображение в Unity, оно распознается как тип Sprite.

Это позволяет перетаскивать в Unity все изображения, образующие графику игры, а затем из Unity в сцену. Если какие-то изображения выглядят мелкими, то вместо их масштабирования везде, где они встречаются, вы можете просто уменьшить значение Pixels To Units. Это очень распространенная операция в Unity как для 2D, так и для 3D и обычно более производительная, чем масштабирование объектов через свойство scale преобразования.

Отпуская объекты, вы наверняка заметите, что один объект оказывается поверх другого. Unity на внутреннем уровне создает серию вершин, даже для 2D-изображений, поэтому порядок рисования может различаться в разных частях изображений. Всегда лучше явно указывать z-порядок своих изображений. Это делается одним из трех методов, перечисленных в порядке, в котором Unity рисует ваши спрайты.

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

Уровни сортировки рисуются в порядке определения. Когда вы добавляете другие уровни (в Edit | Project Settings | Tags and Layers), Unity сначала рисует любой объект, который обнаруживается в уровне Default (затем учитывается Order in Layer, потом — значение позиции по оси Z в Transform), далее Background, Platforms и т. д. Поэтому вы можете легко поправить перекрытие объектов, присвоив их уровню Platforms, а объекту, который должен быть поверх, указав Order in Layer со значением 1; тогда он будет нарисован после всего, что имеет Order in Layer, равный 0.

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

На рис. 3 показан уровень, содержащий некоторые изображения платформ и фона, которые были созданы перетаскиванием и заданием уровней сортировки (sorting layers).

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 3. Игровой уровень

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

Перемещение с помощью клавиатуры, мыши и жестов В Unity клавиатура, мышь, акселерометр и сенсорный ввод считываются через систему ввода. Это легко делается с помощью скрипта наподобие показанного ниже в основном уровне (вскоре я расширю этот скрипт):

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 4. Значения по умолчанию для ввода перемещений по горизонтали

Линейное перемещение Вещи нужно иметь возможность перемещать. Если это игра, где экран прокручивается сверху вниз (top-down game), то гравитация обычно не играет важной роли. Если же это аркада (platformer), гравитация, наоборот, крайне важна. В любом случае обнаружение коллизии объектов весьма критично. Вот базовые правила. Компонент Rigidbody2D или RigidBody (используется для 3D), добавленный к игровому объекту, автоматически придаст ему массу, сделает его поддерживающим гравитацию и способным реагировать на прикладываемые к нему силы. Согласно Википедии: «В физике абсолютно твердое тело (rigid body) является идеализацией твердого тела (solid body), в котором пренебрегается деформацией. Другими словами, расстояние между любыми двумя данными точками абсолютно твердого тела остается постоянным во времени независимо от действующих на него внешних сил». Тот же принцип применяется в играх. Добавление абсолютно твердого тела позволяет вам делает вызовы наподобие показанных на рис. 5.

Рис. 5. Добавление перемещения и скорости

Как общее правило, линейное перемещение должно происходить через Update, а перемещение с ускорением — через FixedUpdate. Если вы новичок, вам может показаться непонятным, когда что использовать, и, по сути, линейное перемещение будет работать в обоих случаях. Но вы добьетесь лучших визуальных результатов, следуя этому правилу.

Обнаружение коллизий Объект получает массу от своего компонента RigidBody, но, кроме того, вы должны сообщить Unity, как обрабатывать коллизии с этим объектом. Здесь размер и форма ваших изображений или моделей не имеют значения, хотя масштабирование все же влияет на физику самого объекта. Важны размер и форма компонента коллайдера (collider component), который представляет собой просто определенную область вокруг или внутри объекта, для которого нужно, чтобы Unity обнаруживала соприкосновение с другим объектом. Это обеспечивает поддержку таких ситуаций, когда вы входите в область неактивного зомби или когда при приближении к горе на вас скатывается валун.

Коллайдеры бывают самых разнообразных форм. Коллайдер для 2D может быть окружностью, границей (гранью), многоугольником или прямоугольником. Прямоугольные коллайдеры хороши для объектов с формой наподобие квадратов или прямоугольников, или когда вы просто хотите обнаруживать коллизии в квадратной области. Подумайте о платформе, на которой вы стоите, — это хороший пример прямоугольного коллайдера. Простое добавление этого компонента к вашему игровому объекту позволяет задействовать преимущества физических столкновений. На рис. 6 я добавил персонажу коллайдер в виде окружности и абсолютно твердое тело, а к платформе — прямоугольный коллайдер. Когда я запускаю игру в Editor, игрок немедленно падает на платформу и останавливается. Никакого кода не требуется.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 6. Добавление коллайдеров

Вы можете перемещать и изменять размер области, охватываемой коллайдером, изменяя свойства компонента коллайдера. По умолчанию объекты с коллайдерами не проходят друг сквозь друга (кроме триггеров, о которых я расскажу в следующем подразделе). Поддержка коллизий требует наличия коллайдеров в обоих игровых объектах и, по крайней мере, один объект должен иметь компонент RigidBody, если только это не триггер.

Объект получает массу от своего компонента RigidBody, но, кроме того, вы должны сообщить Unity, как обрабатывать коллизии с этим объектом.

Если я хочу, чтобы Unity вызывала мой код, когда впервые происходит этот случай коллизии, то просто добавляю следующий код в игровой объект через компонент скрипта (о нем мы говорили в предыдущей статье):

Триггеры Иногда нужно обнаруживать коллизию, но безо всякой физики. Возьмите такую ситуацию, когда вы подбираете в игре какой-то ценный предмет. Вы же не хотите, чтобы монеты разлетелись перед игроком, когда он подойдет к ним; вам нужно, чтобы монеты были собраны и никак не мешали перемещению игрока. В этом случае используется коллайдер, который называется триггером. Это не более чем коллайдер с помеченным флажком IsTrigger в его свойствах. Тем самым физика отключается, и Unity будет лишь вызывать ваш код, когда объект A (содержащий коллайдер) попадет в область объекта B (тоже содержащего коллайдер). В данном случае в коде применяется метод OnTriggerEnter2D вместо OnCollisionEnter2D:

Важно помнить, что в случае триггеров никакого физического взаимодействия нет, это в основном просто уведомление. Триггеры также не требуют наличия компонента Rigidbody в игровом объекте, так как никаких вычислений сил не осуществляется.

Одна вещь, о которую часто спотыкаются разработчики-новички, — поведение абсолютно жестких тел при добавлении к ним коллайдеров. Если в моем объекте есть коллайдер, имеющий форму окружности, и я помещаю этот объект на наклонную плоскость (как указывается формой ее коллайдера), он начинает катиться (рис. 7). Это моделирует то, что вы видите в физическом мире, когда колесо попадает на склон. Я не использую прямоугольный коллайдер для своего персонажа из-за того, что у этого коллайдера есть границы, которые могут задевать границы других коллайдеров, что будет приводить к перемещению с рывками. Коллайдер с формой окружности обеспечивает более плавное перемещение. Однако, когда плавное вращение неприемлемо, вы можете использовать параметр Fixed Angle в компоненте Rigidbody.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 7. Применение коллайдера с формой окружности для плавного перемещения

Звук Чтобы слышать звук, нужен компонент Audio Listener, который по умолчанию существует в любой камере. Для проигрывания звука просто добавьте компонент Audio Source к игровому объекту и укажите аудиоклип. Unity поддерживает большинство основных форматов звука и будет кодировать более длинные клипы в MP3. Если у вас множество источников звука с клипами, назначенными в Unity Editor, учитывайте, что все они будут загружены в период выполнения. Вместо этого вы можете загружать звук через код, размещенный в специальной папке ресурсов и уничтожать его, когда он больше не нужен.

Импортировав звук в свой проект, я сохранил его как WAV-файл, который представляет собой несжатое аудио. Unity перекодирует более длинный звук для оптимизации, поэтому всегда используйте звук максимального качества, которым вы располагаете. Это особенно верно для коротких файлов вроде звуковых эффектов, которые Unity не станет кодировать. Я также добавил компонент Audio Source к своей главной камере, хотя мог бы добавить его к любому игровому объекту. Затем я назначил аудиоклип Adventure этому компоненту Audio Source и сбросил флажок Loop, поэтому он постоянно проигрывается как петля. Три простых шага, и теперь в игре есть фоновая музыка.

Чтобы вывести на экран простой текстовый дисплей (например, score: 0), я открыл Game Object | Create Other | GUI Text. Этой команды в Unity 4.6 больше нет, поэтому советую посмотреть видеоролик по uGUI, о котором я упоминал. В версии 4.6 по-прежнему можно добавить компонент GUI Text к игровому объекту, щелкнув кнопку Add Component; он просто убран из меню Editor. В существующей (устаревшей) системе GUI в Unity вы не можете увидеть свои GUI-объекты в представлении сцены — только в представлении Game, что превращает создание разметки в несколько странное занятие. Если хотите, используйте чисто программный подход к настройке своего GUI, и для этого есть класс GUILayout, позволяющий автоматически отслеживать виджеты. Но я предпочитаю систему GUI, где можно легко работать, используя мышь; вот почему я нахожу гораздо совершеннее систему uGUI. (До uGUI лидером в этой области был довольно основательный сторонний продукт — NGUI, который и задействовали как исходную кодовую базу для uGUI.)

Это несколько укороченный пример. Для большей производительности ссылку на компонент GUIText следовало бы кешировать в методе Start, чтобы не запрашивать его при каждом вызове метода.

Отслеживание счета Это несложная задача. У вас просто есть класс, предоставляющий открытый метод или свойство, с помощью которого задается счет. В играх обычно есть объект Game Controller, действующий как организатор игры. Game Controller может отвечать за инициацию сохранений игры, загрузку, учет текущего счета и др. В этом примере у меня есть класс, предоставляющий переменную score, как показано на рис. 8. Я назначаю этот компонент пустому игровому объекту, чтобы он был доступен при загрузке сцены. Когда счет обновляется, происходит обновление и GUI. Переменная _scoreText назначена в Unity Editor. Просто перетащите любой игровой объект с GUIText на это поле или используйте виджет поиска, где данный компонент скриптов предоставляет переменную Score Text в редакторе.

Рис. 8. Создание переменной _scoreText

После этого я могу просто обновить (в данном примере) код триггера гриба для увеличения счета при каждом подборе ценного предмета:

Анимации Как и в XAML, анимации создаются выполнением различных действий в ключевых кадрах. Я мог бы легко посвятить целую статью одним только анимациям в Unity, но буду краток из-за нехватки места. В Unity есть две системы анимации: устаревшая и более новая — Mecanim. В устаревшей системе используются файлы анимации (.ani), а в Mecanim — состояния, управляющие тем, какой файл анимации воспроизводится.

В двухмерной графике по умолчанию применяется Mecanim. Самый простой способ создать анимацию — перетащить изображения в сцену и разрешить Unity создать анимацию за вас. Для начала я перетащил некоторые отдельные спрайты в Unity, а та в свою очередь создала за меня несколько вещей. Прежде всего она создала игровой объект с компонентом рендера спрайтов (sprite renderer component) для рисования спрайтов. Затем — файл анимации. Вы можете увидеть это, перейдя в Window | Animator и выделив свой игровой объект. Аниматор показывает назначенный файл анимации, который в моем случае содержит шесть ключевых кадров, поскольку я перетащил в сцену шесть изображений. Каждый ключевой кадр контролирует один или более параметров в каком-либо компоненте; здесь изменяется свойство Sprite компонента Sprite Renderer. Анимации — это не более чем отдельные изображения, показываемые с некоей частотой, воспринимаемой глазом как движущиеся картинки.

Далее Unity создала компонент Animator в игровом объекте, как показано на рис. 9.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 9. Компонент Animator, указывающий на контроллер

Этот компонент указывает на простой конечный автомат, называемый контроллером анимации. Это файл, создаваемый Unity, который просто показывает состояние по умолчанию; иначе говоря, он всегда находится в состоянии «idle» («простаивает»), так как это единственное доступное состояние. Это состояние простоя ничего не делает, а просто указывает на мой файл анимации. На рис. 10 представлены реальные данные ключевых кадров на временном графике.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 10. Анимационные данные в простое

Может показаться, что для подготовки анимации требуется много усилий. Однако мощь конечных автоматов в том, что вы можете управлять ими, задавая простые переменные. Вспомните: состояние не делает ничего — только указывает на файл анимации (хотя в 3D можно изощряться и делать такие вещи, как смешивание анимаций).

Затем я взял больше изображений, что создать анимацию run (run animation) и перетащил их на свой игровой объект Yeti. Так как у меня уже есть компонент аниматора в этом объекте, Unity просто создает новый файл анимации и добавляет новое состояние «run» («выполняется»). Я могу просто щелкнуть правой кнопкой мыши состояние idle и создать переход к run. При этом появляется стрелка между состояниями idle и run. Далее можно добавить новую переменную Running, использовать которую очень легко: вы просто щелкаете стрелку между состояниями и изменяете условие использования этой переменной, как показано на рис. 11.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 11. Смена состояний из idle в run

Когда Running становится равной true, анимация idle сменяется анимацией run, что означает лишь воспроизведение файла анимации с состоянием run. Вы можете легко контролировать эти переменные в коде. Если вы хотите запустить свою анимацию run инициацией состояния run при щелчке кнопки мыши, то можете добавить код, приведенный на рис. 12.

Рис. 12. Смена состояния программным способом

В моем примере я использовал отдельные спрайты для создания анимации. Однако довольно часто используют ленту спрайтов (sprite sheet) — один файл более чем с одним изображением в нем. Unity поддерживает ленты спрайтов, так что достаточно сообщить Unity, как разделить на части ваш спрайт, а затем включить эти части в вашу сцену. В этом случае от вас потребуется выполнить ряд операций: сменить в свойствах спрайта Sprite Mode с Single на Multiple и открыть Sprite Editor, который потом сможет автоматически поделить спрайт и применить изменения, как показано на рис. 13. Наконец, вы раскрываете спрайт (в режиме просмотра проекта на значке спрайта есть небольшая стрелка), выделяете полученные спрайты и перетаскиваете их в свою сцену, как обычно.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 13. Создание ленты спрайтов

Анимация может быть делом сложным, пока вы не поймете систему. Подробности см. в моем блоге на channel9 или один из многих превосходных ресурсов на сайте обучения Unity.

Конец уровня Когда игрок доходит до конца уровня, можно ограничиться просто коллайдером, работающим как триггер, и позволить игроку попасть в эту зону. После этого вы загружаете следующий уровень или перезагружаете текущий:

Игровой объект и его соответствующие свойства показаны на рис. 14. Заметьте, что высота коллайдера достаточно велика, чтобы игрок не мог перепрыгнуть через него, и, кроме того, этот коллайдер настроен как триггер.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 14. Игровой объект и его свойства

Щелкнув заготовку, вы увидите содержащиеся в нем игровые объекты, как показано на рис. 15. Если вы внесете здесь изменения, все экземпляры в вашей сцене будут обновлены.

Как сделать спрайт в юнити. Смотреть фото Как сделать спрайт в юнити. Смотреть картинку Как сделать спрайт в юнити. Картинка про Как сделать спрайт в юнити. Фото Как сделать спрайт в юнити
Рис. 15. Просмотр содержимого заготовки

Заключение

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

Дополнительные материалы для изучения

Адам Тьюлипер (Adam Tuliper)старший идеолог по технологиям в Microsoft; живет в солнечной Южной Калифорнии. Разработчик инди-игр, один из администраторов Orange County Unity Meetup и автор на pluralsight.com. Скоро в его семье появится третий ребенок, так что связывайтесь с ним, пока у него еще есть свободные минуты, по адресу adamt@microsoft.com или через twitter.com/AdamTuliper.

Выражаю благодарность за рецензирование статьи экспертам Мэтту Ньюмену (Matt Newman) из Subscience Studios и Тоутвидасу Цилису (Tautvydas Žilys) из Unity.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *