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