1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转 移动和 fov 的简单使用整理

Unity 基础 之 鼠标控制 相机(摄像机Camera)的旋转 移动和 fov 的简单使用整理

时间:2020-07-17 13:42:50

相关推荐

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。