角色在每秒30帧的速度下振动

本文关键字:速度 30帧 角色 | 更新日期: 2023-09-27 18:21:43

我正在和Unity一起开发一款2.5D手游。为了前后移动字符,我在更新功能中使用了一段代码:

void Update () {
   if (shouldMove==true){
     transform.Translate(Vector3.forward * 3 * Time.deltaTime);
  }
}

因此,当游戏以每秒60帧的速度运行时,该代码运行得很好,但当每秒30帧或更低时,角色在移动时开始振动。我试着用平面地形测试同样的代码,效果很好,所以问题可能是角色和地形的碰撞器之间的碰撞。然而,我不明白为什么如果fps很高,它会很好地工作。我试过胶囊对撞机和网格对撞机,但都没用。你觉得怎么样?我应该尝试使用另一个代码吗?

编辑1:我使用的是胶囊对撞机和刚体。我应该使用角色控制器吗?

角色在每秒30帧的速度下振动

Sam Bauwens的回答是绝对正确的,但是,这个问题通常是由于对象过多(特别是那些动画对象)造成的。这会使性能大大恶化。

你应该尝试删除一些对象,并尝试你的角色是否仍然振动。如果没有,那就意味着我是对的。当然,您不想删除场景中的对象,因此,您可以添加SmartLOD等资源,该资源可以删除屏幕上未显示的对象的几何体,从而增强游戏的性能。

希望能有所帮助。

我也遇到过类似的问题,球在地面上振动。它是由重力引起的,重力将游戏物体拉向地面,然后它在地面上碰撞并反弹。如果您的问题与我相同,则必须调整固定时间步长(编辑=>项目设置=>时间)和/或反弹阈值

通过增加"反弹阈值"(Bounce Threshold),您将增加对象不会反弹的最小速度,这样重力就不会大到足以使球的速度超过反弹阈值。

通过减少物理时间步长,可以减少每个时间步长的重力影响,因为时间步长较小,因此每个时间步长添加到游戏对象的速度也较小。

编辑:你也可以查看睡眠速度(编辑=>项目设置=>物理),因为如果它高于重力速度,物体就不应该振动。