我尝试了许多不同的方法,但从未成功完成一个非常流畅的相机运动。 即使在非常简单的场景中,相机跟随也不够好。运动中有尖峰。尖峰不是定期发生,而是随机发生。如果我不知道一些团结制作的游戏(例如Manuganu)并且有完美的相机跟随,我认为这是不可能的。
到目前为止我尝试了什么: - 更改LateUpdate / FixedUpdate中的摄像机位置。 - 制作我的目标插值/外推。 -Moved相机取决于Deltatime。 - 增加物理步骤。 - 设置targetframerate = 60。 - 使用所有质量设置,Vsync等。 - 许多变化和其他事情......
最好的情况是,随机打嗝......在手机和编辑器中都会发生。 Unity的示例脚本也不是非常流畅。 由于这个打嗝问题,我无法继续开发sidecroll runner游戏。
问题是:有什么方法我没有提到,互联网上有什么例子吗? 我做了我能做的一切。
transform.position = new Vector3(target.x, target.y, -10);
这是我在LateUpdate中更新相机位置的方法。
PS:没有FPS丢弃问题。
答案 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
了解更多信息和示例