我正在使用Unity开发2.5D手机游戏。为了前后移动字符,我在更新函数中使用了一段代码:
void Update () {
if (shouldMove==true){
transform.Translate(Vector3.forward * 3 * Time.deltaTime);
}
}
因此,当游戏以60 fps运行时代码运行良好,但当fps降至30或更低时,角色会在移动时开始振动。我试图用平面地形测试相同的代码并且效果很好,所以问题可能是角色和地形碰撞器之间的碰撞。但是,我不明白为什么如果fps很高,它运作良好。我已经尝试了胶囊对撞机和网格对撞机,但没有人工作过。你怎么看?我应该尝试使用其他代码吗?
编辑1:我正在使用胶囊对撞机和刚体。我应该使用角色控制器吗?
答案 0 :(得分:3)
我遇到类似的问题,球在地上振动。它是由重力引起的,它将游戏物体拉向地面,然后它在地面上碰撞并反弹。如果您的问题与我相同,则必须调整固定时间步长(编辑=>项目设置=>时间)和/或反弹阈值(编辑=>项目设置=>物理)。
通过增加反弹阈值,你将增加一个物体不会反弹的最低速度,这样重力就不会大到足以使球的速度超过反弹阈值。
通过减少物理时间步长,可以减少每个时间步长的重力影响,因为时间步长较小,因此每个时间步加入游戏对象的速度量较小。
编辑:您还可以查看睡眠速度(编辑=>项目设置=>物理),因为如果它高于重力速度,则物体不应振动。 / p>
答案 1 :(得分:3)
Sam Bauwens对他的回答是绝对正确的,然而,这个问题通常是由于过多的物体(特别是动画的物体)造成的。这会使性能恶化很多。
你应该尝试删除一些对象并尝试你的角色是否仍在振动。如果没有,那就意味着我是对的。当然,您不希望删除场景中的对象,因此,您可以添加SmartLOD等资源,删除屏幕上未显示的那些对象的几何体,从而提高游戏的性能。 / p>
希望它有所帮助。