Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
目录
Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理
一、简单介绍
二、实现原理
三、使用注意
四、效果预览
五、实现步骤
六、关键代码
一、简单介绍
Unity中的一些基础知识点。
本节介绍,在Unity 应用的时候,使用鼠标控制玩家Camera 的旋转移动和 视角fov 的功能,在这里简单做个整理,方便后期使用,如果能帮到您,那就太好了。
二、实现原理
1、Input.GetAxis("Mouse X") 和 Input.GetAxis("Mouse Y") 获取鼠标的移动信息,对应进行角度和移动数据转换,然后赋值到相机上
2、Input.GetAxis("Mouse ScrollWheel") 获取鼠标滚轮的信息,对应进行角度和移动数据转换,然后赋值到相机上
三、使用注意
1、这里只是抛砖引玉的作用,大家可以根据自己的需要,获取自己需要的鼠标数据进行其他拓展,其实第一人称游戏大概就会摸索出一些感觉来了
四、效果预览
五、实现步骤
1、打开Unity,新建一个空工程
2、简单的摆设一下场景,便于演示使用
3、新建一个脚本实现 鼠标控制 camera 的移动旋转和 fov 变化的功能
4、把脚本挂载到场景的 MainCamera 上
5、运行场景,既可以有控制效果
六、关键代码
1、MouseOperationCameraRotationFovMove
using System.Collections;using System.Collections.Generic;using UnityEngine;public class MouseOperationCameraRotationFovMove : MonoBehaviour{public enum MouseState { None,MidMouseBtn,LeftMouseBtn}private MouseState mMouseState = MouseState.None;private Camera mCamera;private void Awake(){mCamera = GetComponent<Camera>();if (mCamera==null){Debug.LogError(GetType()+"camera Get Error ……");}GetDefaultFov();}private void LateUpdate(){CameraRotate();CameraFOV();CameraMove();}#region Camera Rotation//旋转最大角度public int yRotationMinLimit = -20;public int yRotationMaxLimit = 80;//旋转速度public float xRotationSpeed = 250.0f;public float yRotationSpeed = 120.0f;//旋转角度private float xRotation = 0.0f;private float yRotation = 0.0f;/// <summary>/// 鼠标移动进行旋转/// </summary>void CameraRotate(){if (mMouseState == MouseState.None){//Input.GetAxis("MouseX")获取鼠标移动的X轴的距离xRotation -= Input.GetAxis("Mouse X") * xRotationSpeed * 0.02f;yRotation += Input.GetAxis("Mouse Y") * yRotationSpeed * 0.02f;yRotation = ClampValue(yRotation, yRotationMinLimit, yRotationMaxLimit);//这个函数在结尾//欧拉角转化为四元数Quaternion rotation = Quaternion.Euler(-yRotation, -xRotation, 0);transform.rotation = rotation;}}#endregion#region Camera fov//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);//改变相机的 fovmCamera.fieldOfView = (fov);}#endregion#region Camera Movefloat _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;}else if (Input.GetMouseButtonDown(2)){mMouseState = MouseState.MidMouseBtn;Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString());}else if (Input.GetMouseButtonUp(2)){mMouseState = MouseState.None;Debug.Log(GetType() + "mMouseState = " + mMouseState.ToString()); }}#endregion#region tools ClampValue//值范围值限定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}#endregion}