Создание объекта на экране под курсором

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

Создание объекта на экране под курсором

Сообщение anomal3 16 июн 2019, 13:26

Доброго времени суток.
Подскажите пожалуйста с моей тупостью, никак не доходит.
Нужно создать объект у курсора мыши на экране
Нажал мышью на экране и в это месте создать объект
Изображение
Грубо говоря хочу кинуть шар в месте клика
Синтаксис:
Используется csharp
public Transform sphere;

if(Input.GetMouseButtonDown(0))
                {
                        Transform BulletInstance = (Transform) Instantiate(bullet, /*Как определить место клика на экране?*/, Quaternion.identity);
                        BulletInstance.GetComponent<Rigidbody>().AddForce(transform.forward * 1000);
                }
 


пробовал
Синтаксис:
Используется csharp
Input.mousePosition;
но создаётся объект в мировых координатах, а нужно именно на экране
Пробовал относительно центра экрана
Синтаксис:
Используется csharp
new Vector3(Screen.width / 2 - Input.mousePosition.x, Screen.height / 2 - Input.mousePosition.y)
, но выходит фигня
Нужно что то типа такого
Изображение
anomal3
UNец
 
Сообщения: 34
Зарегистрирован: 09 мар 2017, 15:29

Re: Создание объекта на экране под курсором

Сообщение Saltant 16 июн 2019, 14:16

Синтаксис:
Используется csharp
Camera.main.ScreenPointToRay (Input.mousePosition);
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Адепт
 
Сообщения: 2234
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
  • Сайт

Re: Создание объекта на экране под курсором

Сообщение anomal3 16 июн 2019, 14:39

Saltant писал(а):
Синтаксис:
Используется csharp
Camera.main.ScreenPointToRay (Input.mousePosition);

Синтаксис:
Используется csharp
Input.mousePosition
это же Vector3
или я чего то не понимаю?
anomal3
UNец
 
Сообщения: 34
Зарегистрирован: 09 мар 2017, 15:29

Re: Создание объекта на экране под курсором

Сообщение 1max1 16 июн 2019, 15:28

Это же 3д пространство, игра не знает на какой именно дальности создавать объект.
Синтаксис:
Используется csharp
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
var pos = ray.origin + ray.direction * 10.0f;
obj.transform.position = pos;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание объекта на экране под курсором

Сообщение anomal3 17 июн 2019, 10:55

1max1 писал(а):Это же 3д пространство, игра не знает на какой именно дальности создавать объект.
Синтаксис:
Используется csharp
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
var pos = ray.origin + ray.direction * 10.0f;
obj.transform.position = pos;

Спасибо Мах.
Но я немного не догоняю с лучами, подскажи пожалуйста с комментариями.
В переменную Ray мы записываем положение клика мыши на экране,
а в переменной pos что?
anomal3
UNец
 
Сообщения: 34
Зарегистрирован: 09 мар 2017, 15:29

Re: Создание объекта на экране под курсором

Сообщение 1max1 17 июн 2019, 11:46

В переменную Ray мы записываем положение клика мыши на экране,

В переменную ray мы записываем ray)), который исходит из координат камеры (ray.origin) в направлении положения курсора (ray.direction)
а в переменной pos что?

Простая математика векторов, к стартовому положению прибавляем направление луча умноженное на 10, то есть будет позиция, смещенная на +10 юнитов вперед по направлению луча относительно стартовой позиции.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание объекта на экране под курсором

Сообщение anomal3 17 июн 2019, 15:21

1max1 писал(а):
В переменную Ray мы записываем положение клика мыши на экране,

В переменную ray мы записываем ray)), который исходит из координат камеры (ray.origin) в направлении положения курсора (ray.direction)
а в переменной pos что?

Простая математика векторов, к стартовому положению прибавляем направление луча умноженное на 10, то есть будет позиция, смещенная на +10 юнитов вперед по направлению луча относительно стартовой позиции.

Вот только направление теперь странное. Хотя и указывал двигать
Синтаксис:
Используется csharp
transform.forward * 5500
все равно к центру шарики хотят
Не соображу как луч строится. Почему они в центр стремятся?



Синтаксис:
Используется csharp
 public void shoot()

    {

        if (Input.GetMouseButtonDown(0))
        {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            var pos = ray.origin + ray.direction * 10.0f;
            spawn.transform.position = pos;
            Transform BulletInstance = Instantiate(bullet, pos, Quaternion.identity);
            BulletInstance.GetComponent<Rigidbody>().AddForce(new Vector3(pos.x, pos.y, 5500));
        }
    }
anomal3
UNец
 
Сообщения: 34
Зарегистрирован: 09 мар 2017, 15:29

Re: Создание объекта на экране под курсором

Сообщение 1max1 17 июн 2019, 15:28

Используй глобальные оси направления, к примеру Vector3.forward, хотя я не знаю, какая именно тебе нужна.
Синтаксис:
Используется csharp
BulletInstance.GetComponent<Rigidbody>().AddForce(Vector3.forward * force);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Создание объекта на экране под курсором

Сообщение anomal3 17 июн 2019, 16:04

1max1 писал(а):Используй глобальные оси направления, к примеру Vector3.forward, хотя я не знаю, какая именно тебе нужна.
Синтаксис:
Используется csharp
BulletInstance.GetComponent<Rigidbody>().AddForce(Vector3.forward * force);

пробовал я так. Результат такой же
Чего то я запутался.
Оказывается шары не летят к центру, а летят прямо, а из-за камеры в "Перспективе" так "кажется" что они криво летят.

Изображение

все как и положено. Я то хотел добиться другого полёта, как на видео выше. Чтобы вектор продолжал прямо куда смотришь за мышкой. я хз как объяснить. На видео выше видно какой результат хочу добиться
Изображение
anomal3
UNец
 
Сообщения: 34
Зарегистрирован: 09 мар 2017, 15:29

Re: Создание объекта на экране под курсором

Сообщение 1max1 17 июн 2019, 16:30

Синтаксис:
Используется csharp
BulletInstance.GetComponent<Rigidbody>().AddForce(ray.direction * force);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11