4

我正在使用 Unity 开发 2.5D 手机游戏。为了前后移动角色,我在更新函数中使用了一段代码:

void Update () {

   if (shouldMove==true){

     transform.Translate(Vector3.forward * 3 * Time.deltaTime);
  }
}

因此,当游戏以 60 fps 运行时,该代码运行良好,但当 fps 降至 30 或更低时,角色在移动时开始振动。我试图用平面地形测试相同的代码并且效果很好,所以问题可能是角色和地形碰撞器之间的碰撞。但是,我不明白为什么如果 fps 很高,它工作得很好。我已经尝试过胶囊对撞机和网状对撞机,但没有人成功。你怎么看?我应该尝试使用其他代码吗?

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

4

2 回答 2

3

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

通过增加反弹阈值,您将增加物体不会反弹的最小速度,这样重力就不会大到足以使球的速度超过反弹阈值。

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

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

于 2013-07-10T15:50:27.243 回答
3

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

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

希望能帮助到你。

于 2013-07-11T10:49:27.513 回答