Не редко бывают случаи, когда нам необходимо выполнить определённые действия, исходя из положения нашего курсора на игровой сцене. Обычно такое реализуют для стрельбы, или освещения помещений. В данной статье мы разберём на двух конкретных примерах, как заставить реагировать объекты на курсор Вашей мыши.
Способ 1. Вращение объекта
Предположим, в центре вашего экрана расположена пушка, которой Вы управляете. Она может вращаться по круговой, ориентируясь на расположение курсора в игровой сцене. Для реализации такой функции для начала объявим переменную, наример, Point.
public Transform Point;
В это поле необходимо через окно Inspector перетащить тот объект(пушку), которую мы хотим вращать нашим курсором. Далее пропишем код, который будет определять координаты нашего курсора, относительно нашей игровой камеры.
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);
Поздравляем, теперь наш объект вращается за нашим курсором мыши. Итоговый код выглядит следующим образом:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class createBullet : MonoBehaviour
{
public GameObject bullet;
public Transform Point;
private void Update()
{
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);
if (Input.GetKeyDown(KeyCode.Mouse0)) // Input.GetMouseButtonDown(0)
{
Instantiate(bullet, Point.position, transform.rotation); // Quaternion.identity
}
}
}
Способ 2. Передвижение объекта
Предположим, нам необходимо реализовать прицел, который заменит нам курсор мыши. Для этого необходимо создать пустой объект, который и будет служить нашим прицелом. Именно этот объект мы и будем передвигать в место, где расположен курсор. Первым делом уберём стандартную иконку курсора с помощью метода Awake(), вписав в него следующий код:
void Awake()
{
Cursor.visible = false;
}
Теперь с помощью двух следующих строчек кода, мы находим координаты курсора мыши, и создаём для нашего объекта(прицела) новые координаты, относительно координаты курсора мыши.
Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1);
Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
Ну и в завершении меняем позицию нашего объекта(прицела) на ту позицию, которую мы подготовили в коде выше:
transform.position = objPosition;
Готово! Теперь вместо курсора мыши будет находиться наш прицел. Итоговый код выглядит следующим образом:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cursor : MonoBehaviour
{
void Start()
{
Cursor.visible = false;
}
void Update()
{
Vector3 mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 1);
Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
transform.position = objPosition;
}
}