【发布时间】:2021-04-15 08:32:07
【问题描述】:
游戏:在一个用 Unity 制作的简单 2D 肖像游戏中,我有一个游戏对象(玩家),它有一个固定的位置并且正在向上移动。摄像机跟随玩家,动画障碍物不时从左向右移动。附加的Screenshot 显示了场景。
问题: 运动并不顺畅,因为播放器似乎在抖动。我想我已经确定了其中一个原因:Time.deltaTime 的巨大变化。平均值是 0.0167,但我有变化。最小值为 0.00177,最大值为 0.2249519。
设置: 目标帧率为 60。我使用 Unity 2019.4.2f1 并作为构建目标使用 iOS 14.2 的 iPhone X。
脚本
public class Player: MonoBehaviour
{
float speed = 5f;
void Update()
{
transform.Translate(0,speed*Time.deltaTime,0);
}
}
public class CamFollow : MonoBehaviour
{
public Transform Player;
private Vector3 FollowVector;
void LateUpdate()
{
FollowVector = Player.position - new Vector3(0, -4.0f, 10);
transform.position = Vector3.Lerp(transform.position, FollowVector, Time.deltaTime * 4f);
}
}
注意:我需要使用Lerp,因为播放器可能会降低或增加速度一秒钟,然后相机会轻轻移动到新位置,然后再变回来。对于障碍,我没有脚本。他们正在移动,通过使用动画组件。对于障碍物,我只循环改变位置的 x 值。
我的替代解决方案:
1.将 Time.deltaTime 的值更改为常数值 0.01666667f:
void Update()
{
transform.Translate(0,speed*0.01666667f,0);
}
这使得播放器对象在 Unity 编辑器中抖动很多,但在设备上只有一点点
2。对相机跟随和玩家移动使用固定更新
这使得运动和相机跟随完美流畅,但动画对象抖动很多。我知道 Unity 希望在下一次更新中解决 deltaTime 问题。但是我的问题应该有解决方案,所以有人有类似的问题,可以解决吗?我更喜欢第二种选择,因为动作看起来非常流畅和漂亮,所以我可以让动画成为“fixedUpdate”的一部分吗?
【问题讨论】:
标签: c# unity3d camera smoothing jitter