0

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

到目前为止我所尝试的: - 在 LateUpdate/FixedUpdate 中更改相机位置。- 使我的目标内插/外推。-根据 Deltatime 移动相机。- 增加物理步骤。- 设置目标帧率 = 60。 - 使用所有质量设置、垂直同步等。 - 许多变化和其他东西......

最好的情况是,随机打嗝......发生在移动设备和编辑器中。Unity 的示例脚本也不能完美流畅地运行。由于这个打嗝问题,我无法继续开发 Sidescroll Runner 游戏。

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

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

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

PS:不存在 FPS 掉线问题。

4

2 回答 2

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);
    }
}

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

于 2014-10-30T01:53:52.183 回答
0

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

会是这样的transform.position = Vector3.Lerp(startPosition, endPosition, time);

使用它应该很顺利。您可以在Vector3.Lerp Unity3D获得更多信息和示例

于 2014-10-29T23:20:00.607 回答