Unity3D Choppy Camera Motion

时间:2014-10-29 21:21:14

标签: unity3d camera jitter

我尝试了许多不同的方法,但从未成功完成一个非常流畅的相机运动。 即使在非常简单的场景中,相机跟随也不够好。运动中有尖峰。尖峰不是定期发生,而是随机发生。如果我不知道一些团结制作的游戏(例如Manuganu)并且有完美的相机跟随,我认为这是不可能的。

到目前为止我尝试了什么: - 更改LateUpdate / FixedUpdate中的摄像机位置。 - 制作我的目标插值/外推。 -Moved相机取决于Deltatime。 - 增加物理步骤。 - 设置targetframerate = 60。 - 使用所有质量设置,Vsync等。 - 许多变化和其他事情......

最好的情况是,随机打嗝......在手机和编辑器中都会发生。 Unity的示例脚本也不是非常流畅。 由于这个打嗝问题,我无法继续开发sidecroll runner游戏。

问题是:有什么方法我没有提到,互联网上有什么例子吗? 我做了我能做的一切。

transform.position = new Vector3(target.x, target.y, -10);

这是我在LateUpdate中更新相机位置的方法。

PS:没有FPS丢弃问题。

2 个答案:

答案 0 :(得分:1)

@Kashbel有一半。您使用的是固定移动值,但无法保证每帧都占用相同的实际时间。您需要确保每秒的单位是常量,这意味着您需要使用时间来控制更新的速度。

处理此问题的典型方法是使用Time.DeltaTime,它将始终是一小部分,以秒为单位表示帧的实际世界长度。例如,如文档中所述:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        float translation = Time.deltaTime * 10;
        transform.Translate(0, 0, translation);
    }
}

这里的脚本将移动它的gameObject 10个单位每秒,无论帧速率如何。如果没有Time.deltaTime,它可能会在一帧的1/60秒内移动10个单位,而在1/15秒内在特别慢的帧上移动10个单位。

答案 1 :(得分:0)

尝试使用Lerp功能,而不是直接移动transform.position

就像transform.position = Vector3.Lerp(startPosition, endPosition, time);

使用它应该很顺利。您可以在Vector3.Lerp Unity3D

了解更多信息和示例
相关问题