Unity3D中运动图像的视觉延迟。如何让它更顺畅?

时间:2013-05-30 19:26:42

标签: unity3d lag frame-rate

我在iOS3的Unity3D(+ 2D ToolKit)中制作游戏。

侧视图是2d跑步者/平台游戏者。所以在屏幕上移动背景和障碍。我们控制主角上下/克服障碍。

问题是运动图像有视觉滞后。换句话说,它会急剧移动或在iOS设备上创建前一帧的尾部区域。在XCode中,帧数为30或以上。

我有以下脚本的对象'plain':

public class Move: Monobehavior
{
private float x;
public float Speed = 128.0f;
void Start()
{
x = transform.position.x;
}
void Update()
{
x += Time.DeltaTime *Speed;
Vector3 N = transform.position;
N.x = mathf.FloorInt(x);
transform.position = N;
}
}

问题是如何在播放时使背景更平滑,屏幕上没有抖动和闪烁?也许问题在于帧率参数。 有人可以帮我找到解决方案吗?

2 个答案:

答案 0 :(得分:1)

我会说这是使用FloorInt函数,它只会以1为单位移动背景,而不是很平滑。当你评论那条线时,它会变得更好。你有什么特别的理由在那里做FloorInt吗?

答案 1 :(得分:0)

使用地板肯定会损害您的表现。这不仅是计算的一件事,而且实际上是通过删除小数来消除保真度。这将使运动看起来“生涩”。此外,并不总是在同一时间内调用更新,具体取决于该帧期间发生的其他情况,因此强烈建议使用Time.delaTime。另外,当您可以像下面的代码一样更新横梁位置时,您不需要为x和Vector3 N设置变量。如果必须,您只需要创建一个变量进行更新,并设置您的位置。以下代码仅根据自上次更新后经过的时间量以给定速率更新玩家x位置。应该没有'生涩'的运动。 (除非你有严重的帧率下降);

 public class Move: Monobehavior
    {
        public float Speed = 128.0f;

        void Update()
        {
            transform.position = 
                (transform.position.x + (speed*Time.DeltaTime), 
                transform.position.y,
                transform.position.z);
        }
    }