关于Unity 3D第一人称视角移动时相机抖动的问题
Unity 3D中第一人称视角Camera相机抖动的原因及解决方法
文章目录
- 前言
- 问题反思
- 解决方法
- 错误代码
- 修改后数据
- 总结扩展
前言
在使用Unity自制第一人称FPS游戏时,场景运行时鼠标移动视角的时候,镜头出现抖动现象。
问题反思
出现抖动问题是因为相机跟随的代码放在了Update中,因为跟随目标的移动也是Update每帧执行。但是相机跟随一般是等跟随目标先移动,然后再执行跟随的代码。但是如果两者都放在Update中,执行的顺序不是固定的,所以会出现抖动情况。
解决方法
把Camera的跟随写到 LateUpdate 函数里,因为 LateUpdate 是在所有 Update 方法调用后被调用,这样就解决了人物在移动过程中,摄像机抖动的现象。
1.错误代码
代码如下(示例):(我一开始的代码)
// 相机转动
transform.rotation = Quaternion.Euler(rotationVector3.x, rotationVector3.y, 0);
// 玩家转动
playerTransform.rotation = Quaternion.Euler(0, rotationVector3.y, 0);
2.修改后数据
代码如下(示例):
// 玩家转动
playerTransform.rotation = Quaternion.Euler(0, rotationVector3.y, 0);
// 相机转动
transform.rotation = Quaternion.Euler(rotationVector3.x, rotationVector3.y, 0);
Camera因为要和玩家的角度同向,所以应当将这两行代码进行调换位置,应先让Camera的Rotation.y和玩家相同,然后再让Camera朝向鼠标的坐标,否则每帧运行时先朝向鼠标再和“身体”同步就会让视野抖动
总结扩展
在脚本的整个生命周期中,Unity 主要提供了3种更新方法:
1、Update():每一帧执行时,都会立即调用此方法。
2、LateUpdate():LateUpdate 是在所有 Update 方法调用之后被调用(语出圣典)。
3、FixedUpdate():固定更新。默认情况下,系统每0.02秒调用一次。
三者区别:
Update() 和 LateUpdate() 属于立即更新,更新之间的频率是不固定的,比如某一帧有一个耗时操作时,就会影响到下一帧更新时间,所以对更新频率要求比较稳定的物理系统(如Rididbody)就不太适合在这里处理更新。
FixedUpdate() 虽然是固定更新,但是其实也是相对固定的,比如某一帧耗了好几秒,它依然会卡住。不过正常的程序会优化耗时操作,小范围的帧率波动是正常的,可以让它更新的时间间隔稍微长一点,这样它的更新是比较平滑的。
关于Unity 3D第一人称视角移动时相机抖动的问题相关推荐
- 【Unity】第一人称视角开发
需求 我的需求是在Unity构建一个第一人称视角,实现移动跳跃功能. 主要参考的是这篇博文提供的方案,不过该方案为了只允许一次跳跃,单独在人物底部构建了一个空对象,我无需此限制,因此对其进行了简化. ...
- 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)
文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...
- OpenGL入门暨用C#做个3D吞食鱼(一)第一人称视角的实现
OpenGL入门暨用C#做个3D吞食鱼(一)第一人称视角的实现 废话少说先上图: 图表 1第一人称视角效果图 源代码在文末. 为了学OpenGL,尝试各种代码示例是不错的选择.但是我就经常因为视角不合 ...
- unity实现坦克第一人称视角移动 鼠标发射,位置改变
Holle 好久没更新了,实在想不到更新啥了,就更新下最近痴迷的unity吧. 分为四个板块,实现第三人称视角,上下左右移动,鼠标进行发射炮弹,鼠标改变移动方向 我们的需要准备的工作有:unity 自 ...
- unity中自制模拟第一人称视角
public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...
- arduino 操纵杆_用Arduino做一台FPV(第一人称视角)遥控履带车
这次和大家分享的这个项目结合了3D打印,Arduino和FPV(第一人称视角)相机的相关知识. 非常适合有兴趣制造自己的RC履带车,或者只是想使用3D打印,Arduino和FPV进行创造的伙伴们. 步 ...
- ThingJS平台制作第一人称视角下的巡更效果
今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...
- java第一人称射击_[转] Unity实践 --- 第一人称射击游戏_
一. 环境 地图资源,包含了全地图以及灯光.天空盒子. 扩展部分. 不可穿透的部分需要在bake时设置为static. 二. 设置 1. 相机 1> 主相机 挂载控制视角的c#组件. tag为m ...
- 【游戏程序设计】Direct 3D第一人称摄像机
因为浅墨的摄像机有镜头倾斜的问题,根据评论对其做了一些改变,最终可以让镜头不倾斜了. 具体改动的函数是绕上向量旋转的函数.将绕上向量旋转改为绕Y轴旋转即可.因为根据人的视觉习惯是绕Y轴旋转的. //- ...
最新文章
- ffmpeg 基本用法大全
- poj 1270(toposort)
- springmvc提供RestController方法接口返回json数据中文乱码
- C++字节序反转的实现算法(附完整源码)
- C语言 | 指向指针的指针排序
- 计算机专业英语主要句型及翻译技巧,计算机专业英语单词及翻译等技巧-20210420072747.ppt-原创力文档...
- 前端学习(3090):vue+element今日头条管理-参数传递
- setid android,android-如何将setId()用于imageView
- vue 多个回调_vue中多层组件间参数的传递、子孙组件回调父组件执行结果
- 【软件测试系列十二】《压力测试报告模板》
- 中国AI专利申请数超美国近2.5倍
- 有限元分析试题:ANSYS有限元分析中级培训考题及其答案解析(填空+选择+判断+解答)
- html画布抗锯齿,javascript – Node-Canvas图像抗锯齿似乎不起作用
- 输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。(指针)
- 英语单词记忆(词缀 / 前缀)
- 400企业智能服务器,全球领先的企业级服务器、存储、融合系统及解决方案-H3C与HPE...
- 机器学习入门概念--心血总结--史上最强--入门必读--回味无穷
- linux memery dump
- 操作系统与计算机组织基本知识(一)
- php微信聊天带语音,使用Html5多媒体实现微信语音功能