Страница 1 из 1

Следование объекта за мышкой| Проблема со скриптом

СообщениеДобавлено: 08 янв 2020, 13:07
FirstGameMaker
Знаю что вопрос глупый, но всё же тут без вас никак. 2D игра с перспективной камерой, есть простенький скрипт:
Синтаксис:
Используется csharp
using UnityEngine;

public class MobileControl : MonoBehaviour
{
    public Transform player;
    public float speed = 10f;
   
    void OnMouseDrag ()
    {
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        player.position = Vector2.MoveTowards (player.position, new Vector2(mousePos.x, player.position.y), speed * Time.deltaTime);
    }
}
 

По сути он работает исправно, но только если Projection на камере стоит Orthographic, в противном случае объект просто занимает позицию по X на нуле, что никоим образом не совместимо с концепцией проекта. Что нужно изменить для корректной работы скрипта с перспективой?

Re: Следование объекта за мышкой| Проблема со скриптом

СообщениеДобавлено: 08 янв 2020, 13:35
1max1
Вторую камеру добавь ортографическую и бери с нее данные.
Можно еще с бубном потанцевать с ручным переводом позиции.
Что-то типа этого pos = startPos + Input.mousePosition * k;
Но надо еще учесть что координаты берутся не от центра экрана, а с левого нижнего угла.

Re: Следование объекта за мышкой| Проблема со скриптом

СообщениеДобавлено: 08 янв 2020, 14:39
FirstGameMaker
1max1 писал(а):Вторую камеру добавь ортографическую и бери с нее данные.
Спасибо за совет, решил так и поступить, но следственно встал вопрос оптимизации, так как производительность упала вдвое, можете дать базовые советы по этому поводу? Или ещё лучше будет объяснить второй вариант. Буду признателен ещё больше)

Re: Следование объекта за мышкой| Проблема со скриптом

СообщениеДобавлено: 08 янв 2020, 14:52
1max1
Да просто убери все слои рендринга с камеры, чтобы она ничего не видела.

Про второй вариант:
player.position = new Vector2(Input.mousePosition.x, player.position.y);

Смотришь всё ли работает как надо, если нет, а скорей всего нет, пробуешь добавить оффсет.
player.position = new Vector2(Input.mousePosition.x "+" или "-" offsetX, player.position.y);

Смотришь дальше, можно подкорректировать через умножение:
player.position = new Vector2(Input.mousePosition.x * koef "+" или "-" offsetX, player.position.y);

Идем дальше, смотришь как на разных разрешениях экранов это работает (если надо).
Скорей всего будет коррекция типа:
player.position = new Vector2(Input.mousePosition.x * koef "+" или "-" offsetX - Screen.width / 2.0f, player.position.y);

И не факт что будет адекватно работать.
Ну, короче, ты понял, проще сделать второй камерой))

Re: Следование объекта за мышкой| Проблема со скриптом

СообщениеДобавлено: 08 янв 2020, 16:08
FirstGameMaker
Ладно попробую оптимизировать, огромное спасибо 1max1)