Как сделать поворот объекта джойстиком в юнити

Обновлено: 06.07.2024

Так всего лишь надо повернуть вектора джойстика с учетом камеры.

//Примерно так
Vector2 JoystickPosition = _Joystick . GetComponent EasyJoystick >(). JoystickTouch ;
if ( JoystickPosition . magnitude != 0 )
Destination . x = JoystickPosition . x ;
Destination . z = JoystickPosition . y ;
Destination . y = 0 ;
var cameraForward = Camra . main . transfrom . forward ;
cameraForward . y = 0 ;
cameraForward . Normalize ();
var rotation = Quaternion . LookRotation ( cameraForward );
Destination = rotation * Destination ;

_Sphere . rigidbody . AddForce ( Destination * Time . deltaTime * ForceMultiplier );
Debug . Log ( Rotation );
>

Окно Scene имеет набор навигационных элементов управления, которые помогут ориентироваться в нем быстро и эффективно.

Перемещение с помощью стрелок

Для перемещения по сцене можно использовать клавиши со стрелками . Клавиши вверх и вниз перемещают камеру вперед и назад в том направлении, в которое она смотрит. Клавиши влево и вправо поворачивают камеру в стороны. При использовании стрелок, зажмите клавишу Shift для ускоренного перемещения.

Фокусировка

Если выбрать геймобъект в иерархии, затем поместить мышь над Scene View, и нажать Shift+F , вид отцентрируется на выбранном объекте. Эта возможность называется кадрировать выделенное (frame selection) .


Перемещение, вращение по орбите и масштабирование

Перемещение, вращение по орбите и масштабирование - ключевые операции навигации в окне Scene View, поэтому Unity предоставляет несколько альтернативных путей их выполнения для максимального удобства.

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

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


Движение: двигайте мышь с зажатой кнопкой для перемещения камеры.


Вращение: Удерживая Alt , двигая мышь с зажатой кнопкой, вращайте камеру вокруг текущего центра вращения. Эта опция не поддерживается в 2D режиме, потому что вид ортографический.


Масштабирование: Удерживая Control , двигайте мышь с зажатой кнопкой для масштабирования камеры.

Можно зажать клавишу Shift, чтобы увеличить скорость перемещения и масштабирования.

Сочетания клавиш, которые можно использовать без инструмента Hand

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

|**Действие** |3-х кнопочная мышь |2-х кнопочная мышь или трекпад |Mac с однокнопочной мышью или трекпадом | |:—|:—| |Move (Перемещение) |Удерживайте Alt двигайте мышью с зажатой средней кнопкой для перемещения. |Удерживайте Alt-Control двигайте мышь с зажатой кнопкой для перемещения. |Удерживайте Alt-Command и двигайте мышью с зажатой кнопкой для перемещения. | |*Перемещение по орбите |Hold Alt_ and click-drag. |Hold Alt and click-drag. |Hold Alt and click-drag. | |Масштабирование |Зажмите Alt и ПКМ или используйте колесо прокрутки. |Зажмите Alt и ПКМ. |Зажмите Alt-Control и ЛКМ или используйте свайп двумя пальцами. |

* Недоступно в режиме 2D.

Режим полета

Режим полета (flythrough mode) позволяет перемещаться по Scene View летая по нему в режиме от первого лица, примерно так же, как сделано управление во многих играх.

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

Режим полета разработан для Режима Перспективы . In Изометрическом режиме , удерживая ПКМ и двигая мышь, вы можете совершать движение камеры по орбите.

Учтите, что в 2D режиме режим полета не поддерживается. Удерживайте ПКМ и двигайте мышью чтобы смещать область обзора в окне Scene.

Гизмо сцены

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


You can click on any of the conical axis arms to snap the Scene View Camera to the axis it represents (eg. top view, left view, front view, etc.)

You can also toggle the projection of scene view between perspective and orthographic (sometimes called ‘isometric’) modes by clicking the cube in the centre of the Scene Gizmo, or the text below it. Orthographic view has no perspective, and it is useful in combination with clicking one of the conical axis arms to get a front or side elevation, or a plan view.

A scene shown in perspective mode (left) and orthographic mode (right) The same scene viewed in top and front view, in orthographic mode

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

Важно отметить, что в 2D режиме гизмо сцены не отображается, потому что вид представлен только в XY плоскости.

Жесты в Mac на трекпаде

В Mac с трекпадом, можно тянуть двумя пальцами для масштабирования вида.

Также можно использовать три пальца для симуляции эффекта клика на стрелки гизмо сцены: тянуть вверх, влево, вправо или вниз для привязки к соответствующему направлению камеры Scene View. В OSX 10.7 “Lion” может потребоваться изменить настройки трекпада чтобы включить эту возможность:

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

Вращения в 3D приложениях обычно представляют одним из двух путей: кватернионы ( Quaternions ) или углы Эйлера ( Euler angles ). У каждого из них есть свои преимущества и недостатки. Unity под капотом использует для представления вращений кватернионы, но в инспекторе для удобства показаны значения углов Эйлера, это делает изменение значений в инспекторе более простым и легким для понимания.

Углы Эйлера.

Углы Эйлера представлены тремя значениями углов для осей X, Y и Z которые применяются последовательно. Чтобы применить вращение Эйлера к конкретному игровому объекту Каждое значение вращения применяется поочередно, как вращение вокруг своей соответствующей оси.

У углов Эйлера есть следующие преимущества:

- Они могут представлять собой поворот от одной ориентации к другой через поворот более чем на 180 градусов

Но без недостатков как вы понимаете такой способ представления вращения также не обошелся:

Кватернионы.

Кватернионы могут использоваться для представления ориентации или вращения игровых объектов. Это представление внутри состоит из четырех чисел (в рамках Unity это X, Y, Z и W ) однако эти числа не представляют собой углы или оси, и обычно вам никогда не нужно обращаться к ним напрямую. Если вы не особо заинтересованы в изучении математики кватернионов, то вам действительно нужно знать только одно, что кватернион представляет собой вращение в трехмерном пространстве, и вам никогда нет нужды знать или изменять свойства X, Y, и Z напрямую.

К его сильным сторонам можно отнести:

К слабым можно отнести следующее:

- Один кватернион не может представлять вращение, превышающее 180 градусов в любом направлении.

- Числовое представление кватерниона не является интуитивно понятным.

Unity хранит вращения всех игровых объектов как кватернионы, так как его достоинства перевешивают недостатки.

Компонент Transform отображает в инспекторе вращения с использованием углов Эйлера, поскольку это легче понять и отредактировать. Unity преобразует новые значения в инспекторе для вращения игрового объекта в новые значения вращения кватерниона.

Существует небольшой побочный эффект от таких преобразований, скажем мы ввели в окне инспектора следующие цифры для Rotation X: 0 Y: 375: Z: 0 . Это значение невозможно представить в виде кватерниона, поэтому при запуске игры в инспекторе значения вращения игрового объекта изменятся на X: 0 Y: 15: Z: 0 . Это происходит потому, что Unity преобразует вращение в кватернион, который не имеет понятия полного вращения на 360 градусов плюс 5 градусов, вместо этого он настроен на ориентацию таким же образом, как и результат вращения.

Последствия для написания скриптов.

При работе с обработкой вращений в ваших скриптах, вы должны пользоваться классом Quaternion (о нем еще будет отдельная статья) и его функциями для создания и изменения вращательных значений. Есть некоторые ситуации, когда допустимо использовать углы Эйлера, но вы должны иметь в виду – нужно использовать функции класса Quaternion , которые имеют дела с углами Эйлера. Извлечение, изменение и повторное применение значений углов Эйлера из свойства Rotation компонента Transform может вызвать непреднамеренные побочные эффекты.

Последствия для создания анимации.

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

Эти значения вращений часто могут превышать диапазоны, выражаемые кватернионами. Например, если игровой объект вращается на 720 градусов, это может быть представлено углами Эйлера как X: 720 Y: 0 Z: 0 . Но это невозможно представить с помощью значения кватерниона.

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

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

Также есть некоторые ситуации, когда даже при повторной дискретизации – кватернионное представление импортированной анимации не может соответствовать оригиналу достаточно близко, по этой причине в Unity 5.3 и выше есть возможность отключить повторную дискретизацию анимации, так что вы можете вместо этого использовать исходные ключевые кадры анимации Эйлера во время выполнения.

Выделенный пункт позволяет переключаться между дискретизацией в кватернионы или оставить все в формате Эйлера

Выделенный пункт позволяет переключаться между дискретизацией в кватернионы или оставить все в формате Эйлера

На сегодня это все. В следующей статье мы обзорно пройдемся по источникам освещения и камерам в Unity. Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!

Захотелось мне сделать двухмерную игру. Благо, в Unity3D недавно появился соответствующий инструментарий. Однако, когда я дошел до момента, когда мне нужно было просто повернуть спрайт к какой-то позиции, я жутко разочаровался - все функции, принимающие в качестве параметров местоположение, и возвращающие соответствующее вращение (Quaternion.LookRotation, Quaternion.FromToRotation, Transform.LookAt), ориентированы исключительно на трехмерное пространство, а в трехмерном пространстве, если один объект повернут ко второму, это значит, что его вектор forward (вектор, представляющий ось Z локальной системы координат объекта) "смотрит" на цель.

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

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