Перейти к содержимому

Как получить позицию мыши unity

  • автор:

Input.mousePosition

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

Ошибка внесения изменений

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

Ваше имя Адрес вашей электронной почты Предложение * Разместить предложенное
public static var mousePosition : Vector3;
public static Vector3 mousePosition ;

Описание

Текущее положение мыши в пиксельных координатах. (Read Only)

The bottom-left of the screen or window is at (0, 0). The top-right of the screen or window is at (Screen.width, Screen.height).

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour < public GameObject particle; void Update() < if (Input.GetButtonDown("Fire1")) < Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray)) Instantiate(particle, transform.position, transform.rotation); > > >

Координаты курсора сцены в редакторе

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

После открытия окна, перемещая курсор по редактору сцены и нажимая на пробел, в окошке будет выводится координаты мира.

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

2д стрельба в сторону курсора мыши на Unity

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

  • В первой части данной статьи мы будем рассматривать простую реализацию стрельбу
  • А во второй части, на основе простой стрельбы, мы сделаем так, чтобы стрельба происходило в направлении курсора мыши.

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

Простая реализация стрельбы

Первым делом создадим префаб пули. Обязательно добавьте к нему компонент Rigidbody2d. А в поле Body Type данного компонента, укажите значение Kinematic — чтобы на пулю не дейстовала гравитация.

Теперь создаём для префаба нашей пули новый компонет(скрипт C#), и назовём его, например, Bullet. Данный скрипт должен производить полёт пули в указанное направление и с определённой скоростью, а так же уничтожать сам себя по истечении определённого времени, чтобы пуля не летела бесконечно долго.

Пропишем всё это в нашем скрипте:

using UnityEngine; public class Bullet : MonoBehaviour < public float timeDestroy = 3f; public float speed = 3f; public Rigidbody2D rb; void Start() < rb = GetComponent(); rb.velocity = transform.up * speed; Invoke("DestroyBullet", timeDestroy); > void DestroyBullet() < Destroy(this.gameObject); >>

Давайте разберём данный код:

  • В строках #5-7 мы объявили три переменные: timeDestroy — для самоуничтожения пули; speed — для указании скорости пули; rb — которая будет хранить ссылку на компонент Rigidbody2D.
  • В строках #11-13 мы сначала получили ссылку на компонент Rigidbody2D. Потом указали движение нашей пули вверх. А так же указали, что через 3 секунды запустится метод DestroyBullet, который уничтожит наш объект пули.

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

Теперь нам нужно сделать саму стрельбу персонажа, чтобы по клике мыши он создавал эту пулю. Для этого создадим скрипт C# для нашего персонажа. Скрипт назовём Player, и впишем в данный скрипт следующее содержимое:

using UnityEngine; public class Player : MonoBehaviour < public GameObject bullet; void Update() < if (Input.GetKeyDown(KeyCode.Mouse0)) < Instantiate(bullet, transform.position, Quaternion.identity); >> >

В строке #5 мы объявили переменную bullet, в которой будет хранится ссылка на наш префаб пули. Поэтому обязательно перетащите префаб пули в поле bullet в Инспекторе.

А в строке #11 с помощью метода Instantiate() мы создаём пулю на игровой сцене, из вашего префаба пули. И она сразу же будет осуществлять полёт вверх.

Стрельба в направление курсора мыши

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

Пропишем следующую строчку:

Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;

Если вкратце, то она находит векторные координаты курсора относительно объекта пули. А если более подробней, то рекоммендуем посетить нашу статью по определении позиции курсора мыши.

Далее нам нужно развернуть нашу пулю в сторону позиции курсора мыши, для это пропишем следующее:

float rotateZ = Mathf.Atan2(diference.y, diference.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0f, 0f, rotateZ);

Используя данные в переменной diference, с помощью метода Mathf.Atan2 мы получает угол в радианах. А потом с помощью константы Mathf.Rad2Deg, мы преобразовываем преобразовывает радиан в градусы.

Затем с помощью метода Quaternion.Euler мы получаем значение поворота, и присваиваем это значение нашему персонажу.

Готово! Теперь склеим всё что мы написали с кодом из персой части скрипта Bullet префаба пули. Весь код выглядит так:

using UnityEngine; public class Bullet : MonoBehaviour < public float timeDestroy = 3f; public float speed = 3f; public Rigidbody2D rb; void Start() < rb = GetComponent(); Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; float rotateZ = Mathf.Atan2(diference.y, diference.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0f, 0f, rotateZ); rb.velocity = transform.up * speed; Invoke("DestroyBullet", timeDestroy); > void DestroyBullet() < Destroy(this.gameObject); >>

Поздравляем, теперь пуля сразу при появлении на сцене, единоразово сделает поворот в сторону пули, а потом запустит её туда.

Тема была сложная, но надеюсь у меня получилось объяснить данную тему. Но если остались вопросы, пишите в комментариях.

Как отслеживать transform позицию курсора мыши в Unity2d?

Я делаю игру песочницу, в ней объекты создаются нажатием мыши. Но я не нашёл кода который выдавал бы transform позицию, Input.MousePosition выдаёт позицию в пикселях а использовать это в transform position слишком крупно для игры с размером камеры 0.5.

Отслеживать
задан 1 июн 2021 в 16:38
Фёдор Матвеев Фёдор Матвеев
3 2 2 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

ScreenToWorldPoint(Vector3 position); 

где position x,y — экранная точка, а z — глубина на которой нужно разместить обьект на сцене.

Отслеживать
ответ дан 1 июн 2021 в 20:49
Andrew Stop_RU_war_in_UA Andrew Stop_RU_war_in_UA
19k 6 6 золотых знаков 36 36 серебряных знаков 98 98 бронзовых знаков

  • c#
  • unity3d
  • transform
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

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

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *