Помогите портировать управление (Мобилка + ввод мыши) Unity!

Нужно переделать управление под мышку. Скрипт сначала был написан для мобильного, но нужно делать тест и на компьютере. Нужно сделать через #if unity_editor #endif

public Vector2 startPos;
    public Vector3 direction;

if (Input.touchCount > 0)
        {
            Touch touch = Input.GetTouch(0);
            Vector3 touchPosition = Camera.main.ScreenToViewportPoint(touch.position);
            
            switch (touch.phase)
            {
                case TouchPhase.Began:
                    parabora.GetComponent<LineRenderer>().enabled = true;
                    startPos = touch.position;
                    break;
               
                case TouchPhase.Moved:
                    
                    direction.x = touch.position.x - startPos.x;
                    
                        parabolaPoint.position += direction * pointMoovingSpeed;
                    

                    Shoot();
                    break;

                    
            }
        }

Ответы (2 шт):

Автор решения: luvjungle

Будет как-то так. Не очень понял, зачем нужна touchPosition, вы к ней нигде не обращаетесь.

Более того, методы Input.GetMouseButton(0) и Input.GetMouseButtonDown(0) прекрасно работают и на мобилках, как тачи, так что можно оставить только их.

Хотя конечно может у TouchPhase.Moved какая-то хитрая проверка на то, что палец действительно двинулся, не помню, тогда придется реализовываться какой-то фильтр и для мышки

#if !UNITY_EDITOR
    if (Input.touchCount > 0)
    {
        Touch touch = Input.GetTouch(0);
        Vector3 touchPosition = Camera.main.ScreenToViewportPoint(touch.position);

        switch (touch.phase)
        {
            case TouchPhase.Began:
                parabora.GetComponent<LineRenderer>().enabled = true;
                startPos = touch.position;
                break;

            case TouchPhase.Moved:

                direction.x = touch.position.x - startPos.x;

                parabolaPoint.position += direction * pointMoovingSpeed;


                Shoot();
                break;
        }
    }
#else
    if (Input.GetMouseButtonDown(0))
    {
        parabora.GetComponent<LineRenderer>().enabled = true;
        startPos = Input.mousePosition;
    }
    else if (Input.GetMouseButton(0))
    {
        Vector3 touchPosition = Camera.main.ScreenToViewportPoint(Input.mousePosition);
        direction.x = Input.mousePosition.x - startPos.x;
        parabolaPoint.position += direction * pointMoovingSpeed;
        Shoot();
    }
#endif
→ Ссылка
Автор решения: Yaroslav

Кстати, Input.touches работает в редакторе...

private void Update () {
    UpdateInputs();
}

private void UpdateInputs () {
    #if UNITY_EDITOR
    UpdateMouse();
    #else
    UpdateTouch();
    #endif
}

private void UpdateMouse () {
    if (Input.GetMouseButtonDown(0))
        InputBegan(Input.mousePosition);
    if (Input.GetMouseButton(0))
        InputMove(Input.mousePosition);
    if (Input.GetMouseButtonUp(0))
        InputEnd(Input.mousePosition);
}

private void UpdateTouch () {
    if (Input.touchCount > 0)
        foreach (Touch touch in Input.touches)
            switch (touch.phase) {
                case TouchPhase.Began: InputBegan(touch.position); break;
                case TouchPhase.Moved: InputMove(touch.position); break;
                case TouchPhase.Ended: InputEnd(touch.position); break;
        }
}

private void InputBegan (Vector2 position) {
    /* ...code... */
}

private void InputMove (Vector2 position) {
    /* ...code... */
}

private void InputEnd (Vector2 position) {
    /* ...code... */
}
→ Ссылка