我在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;
}
}
问题是如何在播放时使背景更平滑,屏幕上没有抖动和闪烁?也许问题在于帧率参数。 有人可以帮我找到解决方案吗?
答案 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);
}
}