Unity Camera는 마우스나 터치에 따라 움직입니다.

1. 국경에서 이동

마우스가 게임 인터페이스의 경계에 도달하면 카메라를 움직이기 시작하며 마우스가 필요한 PC 쪽 게임에 적합합니다.

        if (Input.mousePosition.y > Screen.height)
        {
    
    
            m_camFollowPos.y += moveAmount * Time.deltaTime;
        }
        if (Input.mousePosition.y < 0)
        {
    
    
            m_camFollowPos.y -= moveAmount * Time.deltaTime;
        }

        if (Input.mousePosition.x > Screen.width)//如果鼠标位置在右侧
        {
    
    
            m_camFollowPos.x += moveAmount * Time.deltaTime;//就向右移动
        }
        if (Input.mousePosition.x < 0)
        {
    
    
            m_camFollowPos.x -= moveAmount * Time.deltaTime;
        }

        m_camFollowPos.y = Mathf.Clamp(m_camFollowPos.y, m_minCamYPos, m_maxCamYPos);
        m_camFollowPos.x = Mathf.Clamp(m_camFollowPos.x, m_minCamXPos, m_maxCamXPos);
        myCamera.transform.position = m_camFollowPos;//刷新摄像机位置

2. 마우스/터치를 누른 상태에서 카메라 끌기

마우스를 누른 상태에서 PC 쪽에서 카메라를 드래그합니다. 모바일 단말기에서 한 손가락으로 카메라를 누르고 드래그합니다.

    void Update()
    {
    
    
        if (GameRoot.Instance.isMenuActive)
        {
    
    
            return;
        }

#if (UNITY_ANDROID || UNITY_IPHONE) && !UNITY_EDITOR
			HandleTouchInput();
#else
        HandleMouseInput();
#endif
    }

    void HandleTouchInput()
    {
    
    
        if (Input.touchCount == 1)
        {
    
    
            Touch touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
    
    
                m_prevPosition = touch.position;
            }
            else if (touch.phase == TouchPhase.Moved)
            {
    
    
                Vector2 curPosition = touch.position;
                MoveCamera(m_prevPosition, curPosition);
                m_prevPosition = curPosition;
            }
        }
    }

    void HandleMouseInput()
    {
    
    
        if (Input.GetMouseButtonDown(0))
        {
    
    
            m_prevPosition = Input.mousePosition;
        }
        else if (Input.GetMouseButton(0))
        {
    
    
            Vector2 curMousePosition = Input.mousePosition;
            MoveCamera(m_prevPosition, curMousePosition);
            m_prevPosition = curMousePosition;
        }
    }

    private void MoveCamera(Vector2 prevPosition, Vector2 curPosition)
    {
    
    
        //注意这里的myCamera.nearClipPlaen。由于我使用的是透视相机,所以需要将z值改为这个
        //如果读者使用的是正交相机,可能不需要这个
        Vector2 offset = (myCamera.ScreenToWorldPoint(new Vector3(prevPosition.x, prevPosition.y, myCamera.nearClipPlane)) - myCamera.ScreenToWorldPoint(new Vector3(curPosition.x, curPosition.y, myCamera.nearClipPlane)));
        //这里的m_cameraScale,因为我不想修改nearClipPlaen的值来达到移动的快慢,所以加了个移动参数
        Vector2 newPos = new Vector2(transform.localPosition.x + offset.x * m_cameraScaleVal, transform.localPosition.y + offset.y * m_cameraScaleVal);
        newPos.y = Mathf.Clamp(newPos.y, m_minCamYPos, m_maxCamYPos);
        newPos.x = Mathf.Clamp(newPos.x, m_minCamXPos, m_maxCamXPos);
        transform.position = new Vector3(newPos.x, newPos.y, transform.position.z);
    }

Supongo que te gusta

Origin blog.csdn.net/qq_28644183/article/details/125672893
Recomendado
Clasificación