Вторник, 20 Августа 2019, 21:21

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [321]
Статьи об общих понятиях связанных с созданием игр.
Программирование [71]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [126]
Статьи о программах для создания игр, уроки и описания.
Софт [28]
Различные программы, в том числе в помощь игроделам.
2D-графика [12]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [11]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [122]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [82]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько часов подряд вы обычно играете?
Всего ответов: 1137
Главная » Статьи » Создание игр

Как написать гироскоп контроллер на Unity
Как написать гироскоп контроллер на Unity.



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

В моем примере я хочу показать, как реализовать следующие функции контроллера камеры:

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

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

Код

private static Quaternion ConvertRotation(Quaternion q)
  {
return new Quaternion(q.x, q.y, -q.z, -q.w);
}


Следующая строка рассчитывает вращение камеры:

Код

transform.rotation = ConvertRotation(Input.gyro.attitude);


Следующая проблема - поддержка различных ориентаций устройства (была решена разработчиками Unity в четвертой версии). Фиксируем кватернионы для каждой ориентации:

Код

private Quaternion GetRotFix()
{
  if (Screen.orientation == ScreenOrientation.Portrait)
  return Quaternion.identity;
  if (Screen.orientation == ScreenOrientation.LandscapeLeft
  || Screen.orientation == ScreenOrientation.Landscape)
  return Quaternion.Euler(0, 0, -90);
  if (Screen.orientation == ScreenOrientation.LandscapeRight)
  return Quaternion.Euler(0, 0, 90);
  if (Screen.orientation == ScreenOrientation.PortraitUpsideDown)
  return Quaternion.Euler(0, 0, 180);
  return Quaternion.identity;
}


Далее - обновленная функция для расчета вращения камеры:

Код

transform.rotation = ConvertRotation(Input.gyro.attitude) * GetRotFix();


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

Код

transform.rotation = cameraBase * ( ConvertRotation(referenceRotation * Input.gyro.attitude) * GetRotFix();


Расчет cameraBase и referanceRotation немного сложнее. Два основных препятствия:

1. При расчет referenceRotation нужно принять во внимание текущую ориентацию устройства.
2. При расчете cameraBase нужно принять во внимание только вращение вокруг верхней оси.

Точные функции вы найдете в прикрепленном примере.

И последнее, сглаживание вращения камеры:

Код

transform.rotation = Quaternion.Slerp(transform.rotation, cameraBase * ( ConvertRotation(referanceRotation *
  Input.gyro.attitude) * GetRotFix()), lowPassFilterFactor);



Теперь добавим две функции: AttachGyro и DetachGyro. Первая позволит включить контроллер и пересчитать все базовые повороты. Вторая - отключает контроллер.

Контроллер готов. К статье прикреплен рабочий пример.

Источник: КЛИК»
Категория: Создание игр | Добавил: NEBR (26 Ноября 2013) | Автор: Дмитрий NEBR Кичеев
Просмотров: 12113 | Комментарии: 3 | Рейтинг: 5.0/7 |
Теги: U3D, гироскоп, мобильные игры на юнити, юнити уроки, контроллер, Разработка игр, Unity, андроид, гироскоп в юнити, iOS
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Как написать гироскоп контроллер на Unity», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 3
+0-
1 kvestpro   (07 Декабря 2013 11:25)
kvestproА будет урок по экранному джойстику?

+1-
2 NEBR   (08 Декабря 2013 11:32)
NEBRты хочешь чтобы я сделал штурвал что тебе нужен? biggrin

+0-
3 kvestpro   (08 Декабря 2013 22:21)
kvestprobiggrin

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • Аперо
  • Nebula
  • Away3D
  • PopCap Games Framework
  • Banshee
  • Alternativa3D
  • Torque 3D
  • Maker3D
  • GameBryo
  • Defold
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2019 Рейтинг