Как перевести координаты клика в обычные

Программирование на Юнити.

Как перевести координаты клика в обычные

Сообщение Merfik933 22 янв 2022, 21:44

Доброго времени суток. У меня есть Метод который должен создавать Объект на месте клика, но вместо этого Объект создается не в том месте (Выше и правее). Как я понял что Input.mousePosition возвращает координаты относительно угла Canvas'а, а локальные координаты относительно его центра. Я пытался вычитать половину размера Canvas'а и это работало, но до того момента пока я не изменил разрешения экрана. Подскажите пожалуйста как перевести координаты клика в обычные координаты или же как сразу получить обычные координаты клика.
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Как перевести координаты клика в обычные

Сообщение BornFoRdeatH 22 янв 2022, 21:59

Не бойся, если ты один, бойся, если ты ноль.
BornFoRdeatH
Адепт
 
Сообщения: 2377
Зарегистрирован: 22 окт 2011, 23:41
Откуда: Украина
Skype: bornfordeath

Re: Как перевести координаты клика в обычные

Сообщение Merfik933 23 янв 2022, 21:11

BornFoRdeatH писал(а):https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Синтаксис:
Используется csharp
GameObject gameObject = Instantiate(Prefab, Prefab.transform.position = Camera.ScreenToWorldPoint(ClickPosition), Quaternion.identity) as GameObject;
gameObject.transform.SetParent(Canvas.transform, false);

почему-то объект появляется в центре экрана, а не в месте клика..
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Как перевести координаты клика в обычные

Сообщение Alkos26Rus 23 янв 2022, 22:19

Merfik933 писал(а):
BornFoRdeatH писал(а):https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Синтаксис:
Используется csharp
GameObject gameObject = Instantiate(Prefab, Prefab.transform.position = Camera.ScreenToWorldPoint(ClickPosition), Quaternion.identity) as GameObject;
gameObject.transform.SetParent(Canvas.transform, false);

почему-то объект появляется в центре экрана, а не в месте клика..

Это жесть, лучше скинь свой первый код, потому как в этом все не правильно. Тебе не нужно переводить положение мышки в мировые координаты, если ты хочешь создать UI элемент на экране. Input.mousePosition не возвращяет ничего относительно угла, он возвращяет координаты мышки на экране в пикселях
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Как перевести координаты клика в обычные

Сообщение Merfik933 24 янв 2022, 21:54

Alkos26Rus писал(а):
Merfik933 писал(а):
BornFoRdeatH писал(а):https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

Синтаксис:
Используется csharp
GameObject gameObject = Instantiate(Prefab, Prefab.transform.position = Camera.ScreenToWorldPoint(ClickPosition), Quaternion.identity) as GameObject;
gameObject.transform.SetParent(Canvas.transform, false);

почему-то объект появляется в центре экрана, а не в месте клика..

Это жесть, лучше скинь свой первый код, потому как в этом все не правильно. Тебе не нужно переводить положение мышки в мировые координаты, если ты хочешь создать UI элемент на экране. Input.mousePosition не возвращяет ничего относительно угла, он возвращяет координаты мышки на экране в пикселях

Синтаксис:
Используется csharp
Vector3 ClickPos = Input.mousePosition;
GameObject gameObject = Instantiate(Prefab, Prefab.transform.position = ClickPos, Quaternion.identity) as GameObject;
gameObject.transform.SetParent(Canvas.transform, false);

Координаты вектора объекта в инспектора равны координатам клика (я посмотрел их с помощью Debug.Log), но по факту они находятся в разных местах
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина

Re: Как перевести координаты клика в обычные

Сообщение 1max1 24 янв 2022, 22:08

Синтаксис:
Используется csharp
var go = Instantiate(prefab, canvas.transform);
go.transform.position = Input.mousePosition.

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

Re: Как перевести координаты клика в обычные

Сообщение waruiyume 25 янв 2022, 01:00

Это не со всеми вариантами канвас скейлера будет работать.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Как перевести координаты клика в обычные

Сообщение Merfik933 25 янв 2022, 17:38

1max1 писал(а):
Синтаксис:
Используется csharp
var go = Instantiate(prefab, canvas.transform);
go.transform.position = Input.mousePosition.

Важно задавать позицию именно после инстанса и парентирования, ну и канвас в оверлее должен быть.

Большое спасибо! :)
Аватара пользователя
Merfik933
UNец
 
Сообщения: 35
Зарегистрирован: 30 сен 2021, 16:10
Откуда: Украина


Вернуться в Скрипты

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 14