Гироскоп дает разработчикам широкий спектр интересных вариаций управления. Но когда доходит дело до его интеграции и реализации контроллера камеры, просходит много странных и волшебных вещей. Разработчики имеют дело с различными ориентациями устройств, исходными позициями камеры и кватернионами. Я буду рад поделиться своим опытом и описать, как мы решили эти проблемы. Будем надеяться, что это позволит сэкономить усилия и нервы тех, которые работают с гироскопом впервые.
В моем примере я хочу показать, как реализовать следующие функции контроллера камеры:
1. Экран устройства должен работать как "окно" в виртуальный мир. Поворачивая девайс, пользователь должен осматривать этот мир. 2. Контроллер должен поддерживать функцию автоповорота и поддерживать все ориентации устройства. 3. Вы сможете отделить контроллер от камеры, изменить ее вращение и положение из кода (например проиграть анимацию камеры), а затем прикрепить контроллер обратно без заметных заминок. 4. Верхняя ось виртуального мира будет соотвествовать верхней оси в реальном мире и будет осуществлена рекалибровка горизонтального вращения.
Первая проблема с которой мы столкнемся это разный тип систем координат, использующихся в iOS устройствах и Unity3d: левосторонняя и правосторонняя. Для того чтобы преобразовать кватернионы из одной системы в другую, используем следующую функцию:
Следующая проблема - поддержка различных ориентаций устройства (была решена разработчиками Unity в четвертой версии). Фиксируем кватернионы для каждой ориентации:
Контроллер должен обновлять вращение камеры, ссылаясь на базовое вращение девайса и сбрасывать базовое вращение в горизонтальную плоскость. Это означает, что если пользователь запускает приложение, указывая устройством на север, игровая камера будет поворачиватся относительно "виртуального" севера. Камера будет показывать данное направление. Ниже приводится новая функция, которая принимает во внимание базовое вращение камеры и устройства.
Расчет cameraBase и referanceRotation немного сложнее. Два основных препятствия:
1. При расчет referenceRotation нужно принять во внимание текущую ориентацию устройства. 2. При расчете cameraBase нужно принять во внимание только вращение вокруг верхней оси.
Точные функции вы найдете в прикрепленном примере.
Теперь добавим две функции: AttachGyro и DetachGyro. Первая позволит включить контроллер и пересчитать все базовые повороты. Вторая - отключает контроллер.
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Как написать гироскоп контроллер на Unity», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.