当前位置: 代码网 > it编程>游戏开发>unity > 关于Unity 3D第一人称视角移动时相机抖动的问题

关于Unity 3D第一人称视角移动时相机抖动的问题

2024年08月03日 unity 我要评论
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() 虽然是固定更新,但是其实也是相对固定的,比如某一帧耗了好几秒,它依然会卡住。不过正常的程序会优化耗时操作,小范围的帧率波动是正常的,可以让它更新的时间间隔稍微长一点,这样它的更新是比较平滑的。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com