文章目录

  • 前言
  • step1:获取鼠标的横纵坐标
  • Step2:限制视角上下的旋转角度
  • Step3:通过旋转相机角度来控制游戏物体的旋转
  • Step4:鼠标居中
  • 完整脚本如下:

前言

  • 随便写了个demo,记录一下思路,忘记的时候好温顾
  • 没有教学的价值,可以参考一下

step1:获取鼠标的横纵坐标

//首先获取鼠标的x和y坐标
var horizontalAxis = Input.GetAxis("Mouse X");
var verticalAxis = Input.GetAxis("Mouse Y");
  • 注意一件事就是鼠标不动的时候,即使之前怎么移动都会回到(0,0)
  • 这个输入只是记录的是瞬时的坐标
  • 如果希望镜头保持的话,需要将上一时刻的旋转角获取并与这一时刻的输入进行相加
 //将上一个时刻的旋转角度获取到,在上一个基础上进行修改,不然鼠标不移动的时候回一直返回(0,0),视角被锁定
tmpHorizontalAxis += horizontalAxis;
tmpVerticalAxis += verticalAxis;

Step2:限制视角上下的旋转角度

  • 通过Mathf的Clamp方法
rotationVector3.x = Mathf.Clamp(-tmpVerticalAxis * mouseSensitive, -65f, 65f);

Step3:通过旋转相机角度来控制游戏物体的旋转

  • 将脚本赋给相机,并将外部需要控制旋转的游戏对象赋给脚本中的transform就可以了
  • 需要注意的是,如果一个人物在平面上,只用同步相机绕y轴旋转的角度进行左右旋转就可以了
// 相机转动
transform.rotation = Quaternion.Euler(rotationVector3.x, rotationVector3.y, 0);
// 外骨骼跟着转动,(但是只围着Y轴转动)
bodyTransform.rotation = Quaternion.Euler(0, rotationVector3.y, 0);

Step4:鼠标居中

  • 先定义

[DllImport("user32.dll")]public static extern int SetCursorPos(int x, int y);
  • 然后再update或者fixedUpdate中调用方法即可
 // 鼠标居中
SetCursorPos((int) Screen.width / 2, (int) Screen.height / 2);

完整脚本如下:

using System.Runtime.InteropServices;
using UnityEngine;/// <summary>
/// 这个脚本复习一下玩家控制
/// 1.鼠标对视角控制
/// </summary>
public class FPInputControlScript : MonoBehaviour
{/*****  鼠标控制  *****///骨骼的transform,开启的时候将脚本付给主相机,需要将外骨骼的transform赋值给此处,就可以绑定其一起动了[SerializeField] private Transform bodyTransform;//主相机的transformprivate Transform cameraTransform;//计算旋转角度的向量private Vector3 rotationVector3;public float mouseSensitive;//计算转动角度private float tmpHorizontalAxis;private float tmpVerticalAxis;[DllImport("user32.dll")]public static extern int SetCursorPos(int x, int y);private void Start(){cameraTransform = transform; //因为脚本赋给相机}private void Update(){//首先获取鼠标的x和y坐标var horizontalAxis = Input.GetAxis("Mouse X");var verticalAxis = Input.GetAxis("Mouse Y");//将上一个时刻的旋转角度获取到,在上一个基础上进行修改,不然鼠标不移动的时候回一直返回(0,0),视角被锁定tmpHorizontalAxis += horizontalAxis;tmpVerticalAxis += verticalAxis;//对上下视角进行限制rotationVector3.x = Mathf.Clamp(-tmpVerticalAxis * mouseSensitive, -65f, 65f);rotationVector3.y = tmpHorizontalAxis * mouseSensitive;// 相机转动transform.rotation = Quaternion.Euler(rotationVector3.x, rotationVector3.y, 0);// 外骨骼跟着转动,(但是只围着Y轴转动)bodyTransform.rotation = Quaternion.Euler(0, rotationVector3.y, 0);// 鼠标居中SetCursorPos((int) Screen.width / 2, (int) Screen.height / 2 + 100);}
}

【unity】FPS用鼠标控制游戏对象转动相关推荐

  1. 【Unity3D入门教程】使用C#脚本控制游戏对象

    前言 使用C#脚本控制游戏对象,是一项必备的基本技能.Unity3D可以使用的脚本有C#和javascript等.我们主要讲注意力集中在C#上.本文将会介绍怎样使用脚本控制场景中的游戏对象. 1 创建 ...

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

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

  3. 游戏编程入门(5):使用键盘和鼠标控制游戏

    接上文 游戏编程入门(4):绘制图形图像 本文内容包括: 如何有效地检测和响应键盘输入 如何处理鼠标输入 如何开发带有动画图形对象的程序,并且可以使用键盘和鼠标来控制动画图形对象 用户输入设备 输入设 ...

  4. unity在脚本中获取游戏对象有三种_Unity3D中用于删除当前脚本所在游戏对象的代码是:_学小易找答案...

    [单选题]297 . 乙醇的颜色为 [单选题]219 . 下列物质中含有极性共价键的是 [单选题]OnWillCreatAsset( string path) 上面命令的作用是: [填空题]针对单个或 ...

  5. unity中通过代码控制游戏中画质

    最近在开发项目的时候突然想到可以添加一个调整画质的按钮或者DropDown或者Slider的UI来控制游戏中的画质 因为我之前写过一篇关于DropDown的使用方法的博客 DropDown的使用方法地 ...

  6. unity中禁用或启用游戏对象

    1,使用enable来完成 public Camera camera_demo; void Update() {camera_demo.enabled=true; //启用游戏对象camera_dem ...

  7. unity里移动鼠标控制物体的移动(2D)

    例如2D游戏里帽子左右的移动: 对于帽子:先获取game视图屏幕的大小,再将其转换成世界坐标点,之后获取帽子的宽度,再计算帽子可移动大小 值 对于鼠标:将鼠标的位置转换为世界坐标位置, private ...

  8. 【Unity】通过鼠标控制相机视角(拉近拉远/选择角度)

    今天优化项目的时候,发现观察物体的视角有些问题,所以就自己写了一些代码,同时参考了一些网上大佬们的写法,改了改,写出来了一篇如下的代码: 功能: 鼠标中间控制视角远近 鼠标右键控制视角旋转 priva ...

  9. unity脚本 --- 控制物体(游戏对象)移动

    一.键盘WSAD控制移动 void Update() {float horizontal = Input.GetAxis("Horizontal");float vertical ...

最新文章

  1. SQL Server 2008基于策略的管理
  2. 【C/C++多线程编程之六】pthread互斥量
  3. SqlHelper数据库操作辅助类
  4. springboot quartz 动态配置_springboot集成quartz实现动态任务调度
  5. c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...
  6. 【Kafka】Kafka ERROR [ConsumerFetcherThread-console-consumer], Error for partition [xx,5] to broker 10
  7. cmd中编译、执行Java文件
  8. GJM:用C#实现网络爬虫(一) [转载]
  9. CorelDRAWX4的VBA插件开发(三)VBA的必用基础知识
  10. (三)CDA 数据分析师Level1考试新版大纲解析(自己整理)PART 3 数据库应用
  11. 手机上万里挑一的CAD看图软件,好用到颠覆你的世界观!
  12. 网站安全工程师与渗透测试工程师有哪些区别
  13. 《看美女不掉头发》【C语言】求一个数是否为素数的四种方法
  14. SOFA Weekly | SOFA 社区元旦快乐,MOSN 荣获 2020 中国优秀开源项目
  15. Redis 微博微信场景使用案例
  16. 病案首页计算机管理系统功能一般不包括,病案管理系统
  17. Kata3.0.0 x LifseaOS x 龙蜥内核三管齐下!带你体验最新的安全容器之旅
  18. 惠普微型计算机w7系统,惠普笔记本电脑一键重装系统win7
  19. 小米node2红外_智能家居之一:小米人体传感器2使用体验
  20. Py之pyod:pyod的简介、安装、使用方法之详细攻略

热门文章

  1. C#毕业设计——基于C#+asp.net+sqlserver的精品课程教学网站设计与实现(毕业论文+程序源码)——教学网站
  2. 网页崩溃原因软件测试,支招:原来这些才是APP崩溃的主要原因!资深技术大牛测试经验总结...
  3. 仿淘宝商品详情页[带有视频和图片的轮播功能]
  4. 淘宝用户行为分析(一):点击—加购—收藏—购买
  5. android签到日历实现
  6. php微信授权ajax,ajax 实现微信网页授权登录
  7. [NLP自然语言处理]谷歌BERT模型深度解析
  8. conda安装包时提示当前用户没有权限
  9. Android实现3DTouch效果
  10. 日常面试刷题9-29