【unity】鼠标控制摄像机视角,旋转,拉近,平移

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraControal : MonoBehaviour
{
    private float xRotation;
    private float yRotation;
    public int yRotationMinLimit = -20;
    public int yRotationMaxLimit = 80;
    private float xRotationSpeed=100;
    private float yRotationSpeed=100;
    private Camera mCamera;

    private void Start()
    {
        mCamera = GetComponent<Camera>();
    }
    void Update()
    {
        CameraRotation();
        CameraFOV();
        CameraMove();
    }
    void CameraRotation()
    {
       float  _MouseX = Input.GetAxis("Mouse X");
       float  _MouseY = Input.GetAxis("Mouse Y");
        if (Input.GetMouseButton(0))
        {
            xRotation -= _MouseX * xRotationSpeed * 0.02f;
            yRotation += _MouseY * yRotationSpeed * 0.02f;
            yRotation = ClampValue(yRotation, yRotationMinLimit, yRotationMaxLimit);
            Quaternion rotation = Quaternion.Euler(-yRotation, -xRotation, 0);
            transform.rotation = rotation;
        }
    }
    float ClampValue(float value, float min, float max)//控制旋转的角度
    {
        if (value < -360)
            value += 360;
        if (value > 360)
            value -= 360;
        return Mathf.Clamp(value, min, max);//限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回value
    }
    //fov 最大最小角度
    public int fovMinLimit = 25;
    public int fovMaxLimit = 75;
    //fov 变化速度
    public float fovSpeed = 50.0f;
    //fov 角度
    private float fov = 0.0f;

    void GetDefaultFov()
    {
        fov = mCamera.fieldOfView;
    }

    /// <summary>
    /// 滚轮控制相机视角缩放
    /// </summary>
    public void CameraFOV()
    {
        //获取鼠标滚轮的滑动量
        fov += Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 100 * fovSpeed;

        // fov 限制修正
        fov = ClampValue(fov, fovMinLimit, fovMaxLimit);

        //改变相机的 fov
        mCamera.fieldOfView = (fov);
    }


    float _mouseX = 0;
    float _mouseY = 0;
    public float moveSpeed = 1;
    /// <summary>
    /// 中键控制拖动
    /// </summary>
    public void CameraMove()
    {
        if (Input.GetMouseButton(2))
        {
            _mouseX = Input.GetAxis("Mouse X");
            _mouseY = Input.GetAxis("Mouse Y");

            //相机位置的偏移量(Vector3类型,实现原理是:向量的加法)
            Vector3 moveDir = (_mouseX * -transform.right + _mouseY * -transform.forward);

            //限制y轴的偏移量
            moveDir.y = 0;
            transform.position += moveDir * 0.5f * moveSpeed;
        }
    }
}
 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DAGUNIANGZHOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值