Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 | 您所在的位置:网站首页 › Unity基础 › Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转,移动和 fov 的简单使用整理 |
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(); 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; /// /// 鼠标移动进行旋转 /// 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; } /// /// 滚轮控制相机视角缩放 /// public void CameraFOV() { //获取鼠标滚轮的滑动量 fov += Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime * 100 * fovSpeed; // fov 限制修正 fov = ClampValue(fov,fovMinLimit, fovMaxLimit); //改变相机的 fov mCamera.fieldOfView = (fov); } #endregion #region Camera Move 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; } 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 }
|
CopyRight 2018-2019 实验室设备网 版权所有 |