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

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

        /// <summary>
        /// 镜头的远离和接近
        /// </summary>
        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;
            }
        }

        /// <summary>
        /// 镜头的移动
        /// </summary>
        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);
            }
        }

        /// <summary>
        /// 摄像机的旋转
        /// </summary>
        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,

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值