Использование WorldToViewportPoint, чтобы оставаться в поле зрения камеры, не работает для положительного зажима - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь перемещать перекрестие по экрану с помощью мыши, но постоянно держу перекрестие в поле зрения статически расположенной камеры.Мой скрипт ниже в основном работает, сохраняя перекрестие на экране слева, справа и снизу.Проблема в том, что я все еще могу переместить перекрестие вверх над верхней частью экрана.Такое ощущение, что у него есть какое-то сопротивление, что странно, но оно идет выше границ экрана вместо блокировки на 0,95.

Соответствующая информация:

  • Перспективная камера
  • -10 градусов поворота X на камере (может быть проблема, но не Viewport должен знатьэто?)

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            // Capture touch origin to create virtual joystick center
            firstTouchPos = Camera.main.ScreenPointToRay(Input.mousePosition);
            crosshairPos = crosshair.position;
        }
    
        if (Input.GetMouseButton(0))
        {
            // Get mouse position
            Ray currentTouchPos = Camera.main.ScreenPointToRay(Input.mousePosition);
            Vector2 direction = currentTouchPos.origin - firstTouchPos.origin;
    
            // Move crosshair
            targetPosition = crosshairPos + direction * touchSensitivity;
            Vector3 pos = Camera.main.WorldToViewportPoint(targetPosition);
            pos.x = Mathf.Clamp(pos.x, 0.05f, 0.95f);
            pos.y = Mathf.Clamp(pos.y, 0.05f, 0.95f);
            targetPosition = Camera.main.ViewportToWorldPoint(pos);
            crosshair.position = Vector3.Lerp(crosshair.position, new Vector3(targetPosition.x, targetPosition.y, -0.6f), Time.deltaTime * followSpeed);
        }
    
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...