Как сделать слежение за мышкой в unity 2d

Обновлено: 06.07.2024

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

https://sites.google.com/site/unrealdevelopmentkitpractick/unity3d/proekt-raycast/3-napravlenie-vzglada-myskoj/ige32.jpg?attredirects=0

Перед вращением камеры давайте определим ряд переменных которые нам позволят в дальнейшем не только крутить головой но и ограничивать это действие в том или ином направлении в определенных случаях.

https://sites.google.com/site/unrealdevelopmentkitpractick/unity3d/proekt-raycast/3-napravlenie-vzglada-myskoj/ige34.jpg?attredirects=0

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

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

В некоторых моментах игры мне хочется ограничить движение камеры игрока по осям для этого я задам два флага и с помощью них я буду запрещать или разрешать вращение по X или Y.

Так же иногда полезно запретить вращение камеры до определенного угла например чтобы голова не крутилась по вертикали через тело в обратную сторону. Для этого я тоже добавлю два флага.

Когда, игрок будет вращать камеру вдоль оси Y в торону мы будем поворачивать его в эту сторону поэтому добавим к переменным ссылку на CharacterController компонент чтобы была возможность его вращать.

Окно 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” может потребоваться изменить настройки трекпада чтобы включить эту возможность:

Креплю к камере, камера вращается по xy от мыши, но она почему то вращается и по оси Z непроизвольно(когда мышь крутищь по часовой или против часовой стрелки), как сделать так чтобы камера вращалась только по заданным координатам x,y, а по z к примеру только через QW?

camera2 | Unity3D вращение GameObject от мыши через Transform.

cgw
X += Input.GetAxis ("Mouse X") * Time.deltaTime;
Y += Input.GetAxis ("Mouse Y") * Time.deltaTime;

if (Input.GetKey (KeyCode.Q))
Z += 1f * Time.deltaTime;
if (Input.GetKey (KeyCode.E))
Z -= 1f * Time.deltaTime;

transform.Rotation = Quaternion.Euler (X, Y, Z);

Благодарю помогло.
немного изменил

using UnityEngine;
using System.Collections;

public class moveobject4 : MonoBehaviour

private float X,Y,Z;
public int speeds;
// Use this for initialization
void Start ()

// Update is called once per frame
void Update () <
X += Input.GetAxis ("Mouse X") * speeds * Time.deltaTime;
Y += Input.GetAxis ("Mouse Y") * speeds * Time.deltaTime;
if (Input.GetKey (KeyCode.Q))
Z += 1f * speeds * Time.deltaTime;
if (Input.GetKey (KeyCode.E))
Z -= 1f * speeds * Time.deltaTime;

transform.rotation = Quaternion.Euler (Y, X, Z);

Спасибо за отличный пример.

Подскажите пожалуйста реализацию, как сделать вращение простого gameobject
при наведении mouse right rotation right mouse left rotation left с замедлением.

gameobject scene demo | Unity3D вращение GameObject от мыши через Transform.

Я думаю многим пример, кто обьяснит как правильно реализовать будет полезен.
Спасибо заранее!

moti
> вращение простого gameobject
> при наведении mouse right
как это распарсить ?


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

Но мы не ищем лёгких путей

Подготовка объектов.

Итак, начнём с того, что создадим какой-нибудь объект (например куб) и привяжем на него камеру (она у нас сейчас только одна — главная камера).

Написание скрипта.

Изначально нужно было определить позицию мышки.

Это оказалось довольно просто — через класс Input и его параметр mousePosition, который содержит три координаты для каждой из осей — x, y и z.

Итак, заведём внутреннюю переменную MousePos, и будем сохранять в неё координаты текущей позиции мышки. Делать это лучше всего перед отрисовкой экрана в событии Update().

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

Незачем это делать каждый раз, а достаточно будет сделать при создании самой камеры на сцене:

Итак, у нас уже есть ссылка на камеру, которую будем крутить, ссылка на объект, вокруг которого будем крутить, и координаты мышки.

Добавим условие, что крутить камеру будем только тогда, когда нажата правая клавиша мышки.

Узнать состояние клавиш мышки можно через всё тот-же класс Input. Специально для этого у него есть метод GetMouseButton.

Само перемещение камеры будем располагать в событии FixedUpdate():

И наконец, мы подошли к самому интересному — определить угол поворота в зависимости от позиции мышки и повернуть камеру.

Коэффициент поворота определить довольно просто: определяем позицию мышки, отнимаем от неё координату середины экрана, и делим получившееся число на размер экрана (отдельно для оси Х и отдельно для Y).

К примеру, мышка находится на координате 852 по оси Х, а размер экрана по ширине равен 1024. Тогда, согласно формуле:

Коэффициент -0,16796875 как раз и будет отвечать за угол поворота по оси Х.

Угол мы рассчитали, теперь осталось только повернуть камеру.

Сделать это можно, используя метод RotateAround класса transform.

Примечание.

И теперь то-же самое для поворота по вертикали:

Вроде-бы можно и закругляться, но есть ещё один момент, который нужно учесть.

Давайте учтём это желание в нашем скрипте. Для этого введём параметр чувствительности sensitivity, и будем его использовать как коэффициент, влияющий на угол поворота:

Скрипт целиком.

Вот теперь точно всё, и осталось только показать весь скрипт целиком, с моими комментариями =)

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