Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Реагирования объекта на курсор мыши

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

Способ 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;
    }
}
Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

0
Будьте первым, кто оставит комментарий к этому посту
Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь