Как сделать портретную ориентацию unity

Обновлено: 03.07.2024

Я провел некоторое время в Unity вчера, пытаясь уволить сферу с горизонтального цилиндра (например, мяча из пушки). Я использовал Vector3.forward, но сфера продолжала выходить сверху цилиндра, а не спереди. Кто-то предложил использовать Vector3.up вместо этого, и, конечно же, это сработало!

Как я могу переориентировать /сбросить оси объекта так, чтобы они соответствовали моим ожиданиям? (И если я не могу, как я могу определить, каким образом ориентирован объект?)

3 ответа

Нажмите на объект в сцене и посмотрите значения вращения в инспекторе. Это скажет вам, каким образом объект ориентирован в абсолютном выражении.

Создайте пустой GameObject как родительский объект вашего объекта и выровняйте его преобразование с ожидаемой осью вашей модели. Теперь используйте родительское преобразование для ссылки и управления дочерним объектом.

Попробуйте использовать transform.up и transform.right вместо Vector3 . Вектор 3 принимает мировые координаты и transform.up учитывает ориентацию преобразования.

Но если ваша модель не смоделирована, чтобы получить ось z в передней части программы modeller, вы не можете организовать это в единстве

Похожие вопросы

Популярные теги


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

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

Но когда доходит до создания игры под мобильные устройства, эти все способы программирования не подходят. Input.GetAxis тут не работает. Начнем разбираться как это чинить.

Платформенно зависимая компиляция

Вот хочу создать игру, управлять которой можно и в самом редакторе и на телефоне. Это что же, писать дополнительные скрипты и вешать их на каждый управляемый объект?! Звучит страшно. По счастью, красота кроссплатформенности Unity заключается в том что существуют способы определить с какого девайса идет управление и в зависимости от этого решать как будет идти обработка управления. Такая вещь называется платформенно зависимая компиляция. Она представляет собой директивы препроцессора. Задача этих директив – указать, какие участки кода должны выполняться в зависимости от того, с какой платформы работает приложение. Unity предоставляет инструменты как для определения платформ так и для определения версий с которых запускается код.

Мы рассмотрим те пункты, которые непосредственно касаются темы сенсорного управления игрой, а любопытные могут посмотреть остальные варианты в официальной документации Unity. Итак, прежде чем приступать к написанию кода контроллера для мобильных устройств, нужно предусмотреть необходимость проверки игры в редакторе.

Важными директивами есть следующие:

  • UNITY_STANDALONE – добавляется для части скриптов, которые выполняются при запуске игры из системы Windows или Linux, или Mac OS X.
  • UNITY_WEBGL – работа с WebGL
  • UNITY_IOS – будет исполняться код для iOS платформы
  • UNITY_ANDROID – директива для платформы Android

Это список самых часто используемых. Есть и другие, методы работы с ними такие же.

Итак, как работать с этими директивами препроцессора и платформенно зависимой компиляцией? Синтаксис директив следующий.

Несколько слов о том, где именно использовать эти директивы. Не пишите важный код внутри одной из директив, иначе не скомпилируется. Дело в том, что тот код, который написан внутри условия, допустим UNITY_IOS, никогда не выполнится при запуске в редакторе. Считайте, что вы просто вырезаете из своего исходного кода части – они никогда не выполнятся. И вот если их отсутствие мешает успешной компиляции, то наверняка этим частям кода не место внутри директивы. Итак, если это понятно, то самое время двигаться вперед к управлению с телефона!

Управление с touchscreen

Природа этого элемента управления несколько иная от клавиатуры и мышки. Скрипты стоит писать с учетом особенностей тачскринов. Поскольку на тачскрине можно зарегистрировать не один, а несколько касаний, то в памяти сохраняется массив, в котором записана информация о каждом касании. В Unity Scripting API за это отвечает класс Input – такой же как и при регистрации ввода с клавиатуры и мыши, однако методы другие.

Основы

Итак, рассмотрим такой сценарий – необходимо зарегистрировать касание одним пальцем на экране. Сначала посмотрим, как узнать позицию касания, а потом – как зарегистрировать касание по игровому объекту. Приступим.


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

Алгоритм состоит из следующий частей:

  1. Зарегистрировать хотя бы одно касание
  2. Сохранить интересующий нас элемент массива
  3. Получить фазу касания экрана и что-то сделать.

И не забываем про директивы и платформенно зависимую компиляцию. Это первое что мы сделаем в коде.


Внутри этой директивы мы имеем право описать управление. Первое – удостовериться,что касание произошло. Input записывает количество касаний в Input.touchCount.

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

Естественно имя переменной вы можете задавать сами.

  1. Фаза касания: их существует несколько. Найти их можно в свойстве myTouch.phase объекта Touch. Представляют собой перечисление TouchPhase. Варианты такие:
    1. Began – произошло начало касания
    2. Moved – пользователь водит пальцем по экрану
    3. Stationary – пользователь касается экрана, но не меняет положения касания
    4. Ended – касание прекратилось
    5. Canceled – система не может считать касание(например пользователь касается ладонью и невозможно определить количество контактов)

    Пример 1. Получение координат точки на экране, куда пользователь указал в игре.


    Пример 2. Касание по объекту на экране. Тут будет использован Raycast.


    Направление движения

    Мультитач


    Для работы с несколькими точками касания на экране необходимо вспомнить про циклы. Помним, что каждый момент касания фиксируется в массиве, а значит, если пройти по всему массиву циклом, то можно получить информацию о каждом касании. В остальном работа не отличается от касания одним пальцем.
    Input.touchCount – это количество элементов в массиве. Получение объекта по индексу – myTouches[i]. И с этой конструкцией можно работать также как в предыдущем разделе мы работали с элементами Touch.

    Акселерометр

    Мобильные устройства позволяют считывать свое положение в трехмерном пространстве. В Unity для этого существуют методы. Прежде всего нужно разобраться с осями. Если вы возьмете телефон в руки и разместите его вертикально (портретная ориентация), то ось Y будет указывать вверх-вниз, ось X в стороны, а Z будет показывать глубину. Работа с акселерометром на самом деле более чем простая. За это отвечает Input.acceleration, который работает почти также как Input.GetAxis.


    Рассмотрим пример. Заставим объект будет двигаться туда, куда наклонено устройство.

    Бонус

    Небольшой совет о том, как проверять работу приложений. Естественно проверить корректность работы своей системы управления можно только на устройстве. И что же, всё время билдить миллионы версий игры и проверять работу? По счастью, нет, не нужно. Команда Unity позаботилась о своих пользователях выпустив приложение Unity Remote.

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

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

    Андроид-игры на UNITY3D

    А есть ли у вас план?

    Если вы решили попробовать свои силы в качестве разработчика игры, UNITY3DSCHOOL рекомендует придерживаться следующего незамысловатого плана действий.

    Вперёд, к покорению виртуальных просторов!

    Теперь можно подумать о том, чтобы запустить игру онлайн, например в Play Store.

    Разработка компьютерных игр — увлекательное занятие. Наши курсы помогут вам реализовать вашу идею в максимально короткий срок.

    Окно сцены имеет несколько способов навигации для ускорения работы.

    Содержание

    Перемещение стрелками

    Вы можете использовать клавиши стрелок для перемещения в сцене - "прогулки" по ней. Стрелки вверх и вниз двигают камеру вперед и назад. Стрелки налево и направо панорамируют вид в стороны. Удерживая при этом клавишу Shift Вы будете двигаться быстрее.

    Фокусирование

    Если Вы выберете объект в Иерархии и нажмете клавишу F,- вид будет перемещен для центрирования выбранного объекта. Эта функция называется "рамка выбора".

    Перемещение, Вращение и Зум

    Эти операции ключевые в навигации по сцене, так что Юнити предоставляет несколько разных путей их выполнения для максимального удобства

    Использование инструмента Рука

    Когда выбран инструмент Рука (быстрая клавиша Q), доступны следующее управление мышью:

    Перемещение: щелчок-перетаскивание для перемещения сцены вокруг камеры.

    Вращение: удерживайте Alt и сделайте щелчок-перетаскивание для перемещения камеры вокруг текущей точки опоры.

    Масштабирование: удерживайте Control (Command на Mac) щелчок-перетаскивание для масштабирования сцены.Удерживание Shift будет увеличивать скорость перемещений и масштабирования.

    Быстрые клавиши без использования инструмента Рука

    Для большей эффективности все эти способы могут быть использованы не зависимо от того какой инструмент трансформации выбран. Удобство управления зависит от того что Вы используете - мышь или трекбол:

    Удерживаем Alt-Command и щелкнув тащим.

    Режим пролета

    Режим пролета позволяет Вам перемещаться в сцене летая в ней от первого лица подобно тому как это сделано во многих играх.

    • Щелкните и удерживайте правую кнопку мыши.
    • Теперь Вы можете двигаться используя мышь и клавиши WASD для перемещения налево/направо вперед/назад и клавиши Q и E для смещения вверх/вниз.
    • При удерживании Shift Вы будете двигаться быстрее.

    Режим пролета разработан для вида перспективы. В виде Изометрии вместо режима пролета будет производиться вращение камеры.

    Гизмо сцены

    В верхнем правом углу Окна сцены выводится Гизмо сцены. Он отображает текущую ориентацию камеры и позволяет Вам быстро модифицировать угол обзора.

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

    Мы покажем, как запрограммировать движение персонажа в 2D- и 3D-проектах на Unity. Урок будет полезен детям и подросткам, которые начинают изучать Unity.

    Начнем урок по Unity с разделения игровой сцены на два компонента, где первый — это площадка, по которой персонаж будет перемещаться. Иначе говоря, это Plane. Второй компонент — объект самого героя, Sphere.

    Далее переходим к оживлению объектов. Управление персонажем на Юнити должно быть физически правильным. Обеспечить это позволяет компонент RigidBody. В инспекторе нажимаем Add Component, затем Physics и RigidBody.

    Создаем пустой скрипт и прописываем переменные, которые будут отвечать за скорость движения, быстроту поворота, передвижение по вертикали и горизонтали. В нашем случае переменные в Си Шарп будут названы MovementSpeed, TurningSpeed, vertical и horizontal соответственно.

    В функции Update прописываем поворот персонажа по оси Y и движение по оси Z.

    Остается только сохранить и скомпилировать созданную программу.

    При работе в 2D-плоскости обучение на Unity становится немного проще, физика такого мира учитывает меньше физических параметров. Для начала добавим два спрайта, которые отвечают за персонажа и за поверхность, по которой он будет ходить. Наши спрайты вы можете скачать по ссылке.

    Читайте также: