Что такое дополненная реальность?
Дополненная реальность (англ. — AR, augmented reality) — одна из самых перспективных технологий XXI века. Сферы применения — практически везде: от игровой индустрии до медицины.
Самый простой вариант AR — когда в твоем смартфоне при наведении на картинку или предмет появляется какое-нибудь изображение — особого удивления, конечно, не вызывает. А вот варианты, когда на изображение можно воздействовать и оно как-то откликается, вызывают восторг перед новыми технологиями. А ведь это еще не самая яркая разновидность дополненной реальности.
Вот несколько примеров:


Самое сложное в дополненной реальности — корректно спроецировать 3D-изображение на видео ряд. Условно можно выделить несколько подходов к решению этой задачи:



Как сделать AR приложение в Unity?
Для того, чтобы упростить задачу по проецированию объекта на поверхность, используют маркеры. Например такие:
Для Unity есть замечательное решение, с помощью которого ты можешь опробовать маркерную AR — Dot AR.

Как работает DotAR?
На камере размещен скрипт, который сначала выключает игровой объект Board, находит элемент интерфейса Raw Image и транслирует на него видео с камеры (да, тебе нужна веб-камера, чтобы разрабатывать AR!). После этого скрипт постоянно анализирует кадры видео и ищет маркер. Если скрипт его находит, то он включает игровой объект Board и, если маркер меняет положение, скрипт также перемещает Board. Создается нужная нам иллюзия, которая в нашем случае и будет назваться AR.
Если тебе этого не достаточно, то мы можем сделать мини-игру, которая будет напоминать нам PokemonGo. Тебе понадобятся:
- картинка с покеболом, которую мы будем использовать как кнопку — ⬇скачать тут;
- 3D-модели покемонов — ⬇скачать тут;
- ну, и конечно, сам asset Dot AR.
Первое, что нужно сделать — разместить 3D-модель покемона в том же месте, где находиться зеленый куб, а также сделать 3D-модель дочерним к игровому объекту Board:

Куб тебе больше не нужен, поэтому его можно удалить. Теперь вместо куба, твоя программа будет проецировать покемона. Осталось сделать скрипт, с помощью которого можно будет его поймать 🙂
Создай новый скрипт и назови его Gotcha. Также создай кнопку, которой ты добавишь этот скрипт, у кнопки нужно заменить Source Image в окне Инспектор (как работать с интерфейсом?) на картинку с покеболом. Вот логика работы Gotcha.cs:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // чтобы все работало, необходимо подключить к скрипту интерфейс public class Gotcha : MonoBehaviour { public int chance; // здесь ты сможешь указать значение от 0 до 100 в окне Инспектор - это шанс поймать покемона void Start() { // получаем и сохраняем компонент кнопки Button button = GetComponent< Button >(); // передаем имя PrintClicked в AddListener. // onClick - событие клика button.onClick.AddListener(TryGotcha); } public void TryGotcha() { if (chance > Random.Range(0,100)) // генерируем число от 0 до 100 { print("Попался!"); // если число, которое выпало меньше, чем шанс поймать покемона, то мы выводим сообщение о том, что покемон попался } else { print("Неудача!"); // если нет, то мы выводим сообщение о том, что у Игрока не получилось } } }
Но, как ты заметил, покемон остается на своем месте. Теперь нужно научить твой скрипт, его ловить. Самый простой способ — просто удалять покемона 🙂
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // чтобы все работало, необходимо подключить к скрипту интерфейс public class Gotcha : MonoBehaviour { public int chance; // здесь ты сможешь указать значение от 0 до 100 в окне Инспектор public GameObject pokemon; // в окне Инспектор нужно будет указать игровой объект с покемоном void Start() { // получаем и сохраняем компонент кнопки Button button = GetComponent< Button >(); // передаем имя PrintClicked в AddListener. // onClick - событие клика button.onClick.AddListener(TryGotcha); } public void TryGotcha() { if (chance > Random.Range(0,100)) { print("Попался!"); Destroy(pokemon, 0f); // удаляем покемона } else { print("Неудача!"); } } }
Еще можно выводить победную надпись «Gotcha!» прямо в интерфейс. Вот как получилось у нас:

Делимся с тобой нашей версией проекта — Pokemon Example.7z — удачи!