- PVSM.RU - https://www.pvsm.ru -

Создание миникарты на Unity

Всем привет. Представляю вашему вниманию перевод статьи из блога, посвященному разработке на Unity — The Knights of Unity [1]. В ней пойдет речь о создании миникарты. Я также реализовал описанное в статье и выложил это на Битбакете [2].


Что требуется для создания миникарты в игре на Unity? Наверно вы будете удивлены, но это проще, чем вы думаете и даже не требует навыков программирования! Далее я постараюсь шаг за шагом объяснить, как это сделать.

Основные идеи миникарты

Создание миникарты на Unity - 1
Миникарты (или радары) предназначены для отображения информации о том, что нас окружает. В первую очередь, миникарта должна быть отцентрирована по главному персонажу. Затем, вместо реальных моделей на ней нужно использовать удобочитаемые обозначения, поскольку миникарты зачастую довольно небольшие, и игрок может не распознать информацию, которую миникарта пытается предоставить.

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

Подготовка сцены

Начнем с добавления кое-чего на сцену. Я создал сцену с Unity-тян [3] (она будет игроком) и двумя роботами [4] (которые будут противниками).

Создание миникарты на Unity - 2

Вид игры

Теперь добавим вторую камеру. Просто выберите пункт главного меню GameObject -> Camera и переименуйте созданную камеру как Minimap Camera. Теперь сделайте эту камеру дочерним объектом по отношению к Unity-тян (это позволит камере следовать за ней) и поднимите ее на 10 единиц выше головы Unity-тян, повернув приэтом вниз.

Создание миникарты на Unity - 3

Настройка камеры миникарты

Для получения хорошего результата установите позицию компонента Transform в 0, 10, 0 и поворот в 90, 0, 0. Камера должна показывать приблизительно вот это:

Создание миникарты на Unity - 4

Хорошо, но это еще не миникарта. Если вы сейчас запустите сцену, изображение с камеры будет просто отображаться на экране. Мы должны сообщить игре, что хотим представить миникарту как UI-элемент.

Отображение в UI-элемент

Для этого нам потребуется Render Texture [5]. Вы можете легко создать ее, выбрав пункт главного меню Assets -> Create -> Render Texture. Создайте и переименуйте как Minimap Render Texture.

Создание миникарты на Unity - 5

Теперь выберите камеру Minimap Camera и назначьте в инспекторе полю Target Texture созданную ранее Minimap Render Texture.

Создание миникарты на Unity - 6

Если вы попробуете запустить сцену, то заметите, что нигде не видно изображения с камеры Minimap Camera. Изображение теперь скрыто в созданной Minimap Render Texture.

Давайте теперь создадим Canvas для добавления на него UI-элементов. Выберите пункт меню GameObject -> UI -> Canvas и Canvas появится на сцене.

Создание миникарты на Unity - 7

На Canvas нужно добавить объект Raw Image, чтобы с его помощью использовать Render Texture. Выберите пункт меню GameObject -> UI -> Raw Image, переименуйте созданный объект как Minimap Image и назначьте в инспекторе полю Texture нашу Minimap Render Texture.

Создание миникарты на Unity - 8

В результате у нас получился UI-элемент, который отображает изображение с камеры Minimap Camera!

Создание миникарты на Unity - 9

Сделаем его в виде окружности. Для этой цели я приготовил простую текстуру-маску:

Создание миникарты на Unity - 10

Создайте новый UI-элемент Image, добавьте на него компонент Mask, в инспекторе задайте полю Source Image нашу текстуру-маску и сделайте объект Minimap Image дочерним по отношению к Mask (подсказка: отключите Mipmaps для текcтуры-маски для лучшего визуального эффекта).

Создание миникарты на Unity - 11

После этих действий наша миникарта будет выглядеть вот так:

Создание миникарты на Unity - 12

Белая миникарта на белом фоне выглядит не очень хорошо. Давайте добавим изображение с контуром поверх нее:

Создание миникарты на Unity - 13
Создание миникарты на Unity - 14

Чтобы было проще перемещать всю эту конструкцию, я сгруппировал ее в отдельный пустой объект, назвав его Minimap.

Создание миникарты на Unity - 15

Наконец, давайте переместим созданную миникарту в верхний правый угол экрана.

Создание миникарты на Unity - 16

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

Развлекаемся со слоями

Нам нужен по крайней мере один дополнительный слой. Перейдите в меню Edit -> Project Settings -> Tags and Layers и добавьте новый слой Minimap.

Создание миникарты на Unity - 17

Теперь создадим три сферы. Одну синего цвета, расположенную в позиции, где стоит Unity-тян. Наилучшим способом будет сделать сферу дочерней по отношению к Unity-тян. Убедитесь, что слой сферы установлен как Minimap.

Создание миникарты на Unity - 18

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

Создание миникарты на Unity - 19

Теперь самая лучшая часть! Выберите камеру Main Camera и убедитесь, что ее свойство Culling Mask не содержит отмеченным слой Minimap.

Создание миникарты на Unity - 20

Теперь выберите камеру Minimap Camera и сделайте с ней обратное действие. Отставьте отмеченным только слой Minimap и отключите все остальные.

Создание миникарты на Unity - 21

Теперь вы видите что-то похожее на настоящую миникарту!

Создание миникарты на Unity - 22

Последние штрихи

Возможно вы захотите внести несколько корректировок. Прежде всего, давайте изменим цвет отсечения камеры Minimap Camera на светло-серый и установим свойство Clear Flags как Solid Color, чтобы фон миникарты лучше контрастировал с синей и красными сферами.

Создание миникарты на Unity - 23

Теперь вы можете добавить на миникарту любые другие UI-элементы. Для примера я добавил текст. И вот конечный результат!

Создание миникарты на Unity - 24

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

Создание миникарты на Unity - 25

И это конец урока по миникарте!

Автор: Charoplet

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/unity3d/149934

Ссылки в тексте:

[1] The Knights of Unity: http://blog.theknightsofunity.com/

[2] Битбакете: https://bitbucket.org/Charoplet/habrtutorminimap

[3] Unity-тян: https://www.assetstore.unity3d.com/en/#!/content/18705

[4] роботами: https://www.assetstore.unity3d.com/en/#!/content/4696

[5] Render Texture: http://docs.unity3d.com/Manual/class-RenderTexture.html

[6] Источник: https://habrahabr.ru/post/304632/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best