2Д прицел
|
|
ArtemS | Дата: Вторник, 01 Августа 2017, 18:51 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Пытаюсь сделать так, чтобы пуля появлялась в направление прицела. Прицел сделан как Canvas -> Image который отслеживает положение мышки
Код public Vector2 mousePosition; void Update () {
mousePosition = Input.mousePosition; transform.position = mousePosition;
К игроку прикреплен "ребенок" - оружие со скриптом слежения за прицелом
Код AIM_pos = Vector2.Lerp(AIM_pos, AIM.position, Time.deltaTime * AIM_speed); transform.LookAt(AIM_pos);
Проблема в том, что у канваса совершенно другие координаты, которые сильно отличаются от его положения на экране игры и выстрел происходит хрен знает куда. Подскажите как сделать так , что прицел имел схожие в масштабе координаты что и игрок
хуяк, хуяк и в продакшн
|
|
| |
CleverRus | Дата: Среда, 02 Августа 2017, 06:40 | Сообщение # 2 |
почетный гость
Сейчас нет на сайте
| А не проще ли поменять иконку курсора через скрипт и просто отслеживать курсор?!
|
|
| |
ArtemS | Дата: Среда, 02 Августа 2017, 18:27 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Цитата CleverRus ( ) А не проще ли поменять иконку курсора через скрипт и просто отслеживать курсор?!
ну не про, извините)
щас буду смотреть как это реализовать.
Добавлено (02 августа 2017, 17:45) --------------------------------------------- CleverRus, а у тебя нету случайно скрипта примера ? все что нашел по замене текстуры идет через GUI.Label - а это по сути то же самое что и у меня. масшбаты плоскостей отличаются и мое оружие переворачивается (почему то ровно на 90 градусов) и выстрел идет хер знает куда(
Добавлено (02 августа 2017, 18:20) --------------------------------------------- Вот оружие поворачивается на 90 по У и я понять не могу с чем это связано. в коде ни каких вращений на gameObject нету.
http://s1.uploadpics.ru/images/ZkzKE6dKFG.png
если отключаю слежение через LookAt то оружие стоит нормально.Добавлено (02 августа 2017, 18:27) --------------------------------------------- как в единой системе с игроком взять координату нашел
Код AIM = Camera.main.ScreenToWorldPoint(Input.mousePosition);
но поворот вокруг У все равно остался
хуяк, хуяк и в продакшн
Сообщение отредактировал ArtemS - Среда, 02 Августа 2017, 18:21 |
|
| |
CleverRus | Дата: Четверг, 03 Августа 2017, 08:23 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| https://docs.unity3d.com/ru/530/ScriptReference/Cursor.SetCursor.html про смену курсора По-поводу поворота оружия, посмотри в инспекторе всё ли стоит по нулям (rotation).
|
|
| |
ArtemS | Дата: Четверг, 03 Августа 2017, 08:50 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| CleverRus, смотрел. в начале rotation 0 0 0, только включаю и сразу поворот идет по У на 90. причем когда курсор в 1 и 4 четверти то 90, а когда в 2 и 3 то -90. Попробывал с Vector3,там Z по камере идет -10, а оружие на Z = 0, стал вычитать из Z высоту камеры, все равно вертится по У. Поиграл с осями в Vector3, нечего толкового не получилось. Щас на работе, приду домой вечером попробую перед LookAt y=0 или после него.
хуяк, хуяк и в продакшн
|
|
| |
CleverRus | Дата: Пятница, 04 Августа 2017, 08:54 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Кидать спрайт игрока и прицела на сцену, каждый как отдельный объект, перед тем, как сделать прицел дочерним игроку, проверь, чтобы у игрока и прицела rotation стоял по нулям, должно решить проблему. Я тоже не профи в юньке, так иногда балуюсь.
|
|
| |
ArtemS | Дата: Понедельник, 07 Августа 2017, 18:41 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| CleverRus, короче, фишка в том что слежение идет нижней стороной пушки, вот он и критится на 90 по У и слежение идет с .right и отсдает на 90 по Х. Надо разбираться как задавать в LookAt нужную сторону для слежения. думаю использовать ray но пока еще не знаю как это сделать грамотно (ну или хоть как - нибудь). вот) Добавлено (07 августа 2017, 18:41) --------------------------------------------- в общем вот скрипт с мнгновенным слежением за прицелом.
Код Vector3 AIM; Vector3 player_pos;
void FixedUpdate () { AIM = Input.mousePosition; player_pos = Camera.main.WorldToScreenPoint(this.transform.position);
AIM.x = AIM.x - player_pos.x; AIM.y = AIM.y - player_pos.y;
float angle = Mathf.Atan2(AIM.x, AIM.y) * Mathf.Rad2Deg; this.transform.rotation = Quaternion.Euler(new Vector3(0, 0, -angle)); }
хуяк, хуяк и в продакшн
|
|
| |