unity-鼠标控制摄像头围绕物体旋转,移动

由于场景中的模型需要设置为static,所以模型不能移动和旋转,所以只能通过控制摄像机来实现。

        /// 
        /// 镜头的远离和接近
        /// 
        public void Ctrl_Cam_Zoom()
        {
            if (target)
            {
                float dis = Vector3.Distance(transform.position, target.position);
                if (dis > ZoomMax || dis < ZoomMin)
                    return;
                float vertical = 0.0f;

                vertical += Input.GetAxis("Mouse ScrollWheel") * ZoomSpeed;

                transform.position += Camera.main.transform.forward * vertical;
            }
        }

        /// 
        /// 镜头的移动
        /// 
        public void Ctrl_Cam_Move()
        {
            if (Input.GetMouseButton(0))
            {
                transform.Translate(Vector3.left * Input.GetAxis("Mouse X") * MoveSpeed);
                transform.Translate(Vector3.up * Input.GetAxis("Mouse Y") * -MoveSpeed);
            }
        }

        /// 
        /// 摄像机的旋转
        /// 
        public void Cam_Ctrl_Rotation()
        {
            if (target)
            {
                var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动
                var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动
                if (Input.GetKey(KeyCode.Mouse1))
                {
                    transform.RotateAround(target.position, Vector3.up, mouse_x * RotateSpeed);
                    //float y = transform.eulerAngles.y + mouse_y * RotateSpeed;
                    //Debug.Log(mouse_y * RotateSpeed);
                    //if (y < 60)
                    //{
                    //    transform.RotateAround(target.position, transform.right, (mouse_y * RotateSpeed) + (60 - y));
                    //}
                    //else if (y > 320) //旋转角度大于85则设置85
                    //{
                    //    transform.RotateAround(target.position, transform.right, (mouse_y * RotateSpeed) - (y - 320));
                    //}
                    //else
                    //{
                    //    transform.RotateAround(target.position, transform.right, mouse_y * RotateSpeed);
                    //}

                    transform.RotateAround(target.position, transform.right, mouse_y * RotateSpeed);
                }
            }
        }

代码中target是围绕物体的Transform,

个人感觉此代码还不完善,就是旋转的部分,没有进行角度的控制,可以随意的旋转,按照我的项目来说,我本想在上下旋转上进行限制,不让用户看到模型的底部,但是没有研究成功,领导也满意现在的成果,所以现在不在进行研究,以后代码有了改善再来修改

你可能感兴趣的:(unity-鼠标控制摄像头围绕物体旋转,移动)