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

    ///


    /// 滚轮控制相机视角缩放
    ///

    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;
    ///


    /// 中键控制拖动
    ///

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

你可能感兴趣的:(unity,游戏引擎,c#)