当前位置:   article > 正文

Unity 3D中Camera相机抖动的一种原因_unity相机坐标过大,有抖动情况

unity相机坐标过大,有抖动情况

Unity 3D中Camera相机抖动的一种原因


前言

在使用Unity自制第一人称小游戏,发现场景运行时,镜头中的物体一直在抖动,于是开始找问题所在


发现问题

在例子过程中用Capsule临时代替下玩家 用来观察地形制作效果

发现Capsule在走动,离开原地后,面前的画面开始出现抖动,并且离其他模型越近闪烁愈加明显。
在检查模型、地形等的Transform面板后发现 是相机的问题
当时发现的原因

解决问题

检查了下代码 认为只有可能是Camera的角度控制处有错
检查代码
最后发现是 Camera因为要和Capsule的角度同向,应该先让Camera的Rotation.y和Capsule相同,然后再让Camera朝向鼠标的坐标

否则每帧运行时先朝向鼠标再和“身体”同步就会让视野抖动
所以只要将红框内的代码,上下调换下顺序即可

Camera的控制代码如下

    var MouseX = Input.GetAxis("Mouse X");
    var MouseY = Input.GetAxis("Mouse Y");  //获得鼠标坐标

    CameraRotation.y += MouseX * MouseSensitivity;  //通过鼠标X轴坐标变化 转动摄像机的Y轴 实现转‘头’
    CameraRotation.x -= MouseY * MouseSensitivity;  //通过鼠标Y轴坐标变化 转动摄像机的X轴 实现抬‘头’,低‘头’
    CameraRotation.x = Mathf.Clamp(CameraRotation.x, AngleLimit.x, AngleLimit.y);   //限制摄像机X轴转动的仰角,最大为AngleLimit.x,最小AngleLimit.y,需要AngleLimit(x,y)
    
    ViewerTransform.rotation = Quaternion.Euler(x: 0, CameraRotation.y, z: 0);                 //观察者的transform角度转向相机的角度 转动Y轴
    CameraTransform.rotation = Quaternion.Euler(CameraRotation.x, CameraRotation.y, z: 0);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/125414
推荐阅读
相关标签
  

闽ICP备14008679号