Unity 3D相机视野控制脚本

涉及了视野放大,缩小,旋转。

相机的跟随记得放在LateUpdate里。

private void LateUpdate()
    {
        transform.position = Vector3.Lerp(transform.position, player.transform.position + offset, Time.deltaTime * 5);
        ScrollView();
        RotateView();
    }

    private void ScrollView()
    {
        //获取鼠标中键滚动的值,向上滚为正值,向下为负值
        float x = Input.GetAxis("Mouse ScrollWheel");
        float distance = offset.magnitude;
        float dis = distance + distance * x * -1;
        //超出指定范围将不做变化
        if (dis <= 4 || dis >= 10)
        {
            return;
        }
        distance *= x;
        transform.position += -1 * offset.normalized * distance * scrollSpeed;
        //更新offset
        if (Mathf.Abs(x) >= 0.05f)
            offset = transform.position - player.transform.position;
    }

    private void RotateView()
    {
        if (Input.GetMouseButtonDown(1))
            isMouseRightDown = true;
        if (Input.GetMouseButtonUp(1))
            isMouseRightDown = false;

        if(isMouseRightDown)
        {
            //得到鼠标在鼠标在x轴和y轴滑动的axis值
            float x = Input.GetAxis("Mouse X");
            float y = Input.GetAxis("Mouse Y");
            transform.RotateAround(player.transform.position, Vector3.up, rotateSpeed * x); //正值为向右,负值为向左

            Vector3 pos = transform.position;
            Quaternion qua = transform.rotation;
            //旋转的轴为人物的x轴,而不是世界的x轴
            transform.RotateAround(player.transform.position, transform.right, -1 * rotateSpeed * y);
            //如果超出范围,就还原
            if(transform.eulerAngles.x <= 10 || transform.eulerAngles.x >= 80)
            {
                transform.position = pos;
                transform.rotation = qua;
            }
            offset = transform.position - player.transform.position;
        }
    }

猜你喜欢

转载自blog.csdn.net/iov3Rain/article/details/81347555