Unity3D起伏的摄像机运动

Unity3D起伏的摄像机运动,unity3d,camera,jitter,Unity3d,Camera,Jitter,我尝试了许多不同的方法,但始终没有成功地使相机运动完全平稳。 即使在一个非常简单的场景中,摄影机跟随也不够好。有钉子在动。尖峰不是周期性的,而是随机的。如果我不知道一些比赛(例如马努加努)是在unity制作的,并且有一个完美的摄像机跟踪,我会认为这是不可能的 到目前为止,我所尝试的: -在LateUpdate/FixedUpdate中更改相机位置。 -使我的目标内插/外推。 -根据Deltatime移动相机。 -增加物理步骤。 -将targetframerate设置为60。 -使用所有质量设置、

我尝试了许多不同的方法,但始终没有成功地使相机运动完全平稳。 即使在一个非常简单的场景中,摄影机跟随也不够好。有钉子在动。尖峰不是周期性的,而是随机的。如果我不知道一些比赛(例如马努加努)是在unity制作的,并且有一个完美的摄像机跟踪,我会认为这是不可能的

到目前为止,我所尝试的: -在LateUpdate/FixedUpdate中更改相机位置。 -使我的目标内插/外推。 -根据Deltatime移动相机。 -增加物理步骤。 -将targetframerate设置为60。 -使用所有质量设置、Vsync等进行播放。 -许多变化和其他事情

最好的情况是,随机打嗝……发生在手机和编辑器中。 Unity的示例脚本也不能很顺利地工作。 因为这个打嗝的问题,我不能继续开发侧滚跑步游戏

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

transform.position = new Vector3(target.x, target.y, -10);
这是我在更新中更新相机位置的方式


PS:没有FPS投放问题

尝试使用
Lerp
功能,而不是直接移动
变换位置

它类似于
transform.position=Vector3.Lerp(起始位置、结束位置、时间)


用这个应该是平滑的。你可以在

@Kashbel上找到更多的信息和例子。您使用的是固定的移动值,但不能保证每个帧占用相同的真实时间。您需要确保每秒的单位是恒定的,这意味着您需要使用时间来控制更新的速度

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

using UnityEngine;
using System.Collections;

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

在这里,无论帧速率如何,脚本都将每秒移动其游戏对象10个单位。如果没有
Time.deltaTime
它可能在一帧上以1/60秒的速度移动10个单位,但在特别慢的帧上以1/15秒的速度移动10个单位。

你的问题是?这里有无数的潜在问题,你至少应该发布移动相机的代码。实际上没有无数的潜在问题,因为我尝试做的事情非常简单。正如你所说,我添加了代码。Thankshow目标会改变其位置吗?你如何计算它?目标有一个物理速度,我的目标和所有其他对象都没有问题。我在macbook上尝试了我的项目,没有任何问题。奇怪。我以前试过lerp,没有做任何改变。谢谢你们的回答,我如何使用这个代码来跟踪一个物体?我的目标有一个刚体和速度。你可能需要一个帧率计数器,这样你就可以区分更新代码中的打嗝和整个游戏运行中的大峰值。偶尔长时间的暂停通常意味着你创建了很多对象,然后垃圾收集暂停。我的场景很简单,没有创建新对象,打嗝很短,但令人不安。有精灵、角色和相机。我可以发送项目。你应该在档案器下查看,看看是否有任何线索。也许是网络代码?还是你自己打嗝了?我试过很多种,结果是:随机打嗝。除了所有其他对象之外,目标对象没有问题。