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);
    }

猜你喜欢

转载自blog.csdn.net/qq_28644183/article/details/125672893
今日推荐