0

我在 iOS 的 Unity3D (+2D ToolKit) 中制作了一个游戏。

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

问题是运动画面有视觉滞后。换句话说,它在 iOS 设备上突然移动或创建先前帧的尾部区域。在 XCode 中,帧数为 30 及以上。

我有以下脚本的“普通”对象:

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

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

4

2 回答 2

1

我想说这是使用 FloorInt 函数,它只会以 1 的步长移动背景,这相当不平滑。当您评论该行时,它应该会变得更好。你有什么特别的原因为什么你在那里做 FloorInt 吗?

于 2013-05-31T08:33:54.750 回答
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);
        }
    }
于 2014-02-24T19:40:54.100 回答