我正在制作2D太空射击手机游戏。我试图设置一个边界,以便船不会离开屏幕。您可以通过倾斜手机来移动船只。我有一个shipController.cs附加到我的船对象。这是我的FixedUpdate函数:
public float xMin, xMax, yMin, yMax;
void FixedUpdate()
{
//tilt to move ship
transform.Translate(Input.acceleration.x * speed, Input.acceleration.y * speed, 0);
//create boundries
rigidbody2D.position = new Vector2(
Mathf.Clamp(rigidbody2D.position.x, xMin, xMax),
Mathf.Clamp(rigidbody2D.position.y, yMin, yMax)
);
}
最小值和最大值在单位检查器中定义。 如果您在PC上进行测试,此代码非常有用。但是当输出到手机时,机芯非常抖动和毛刺。这艘船将到达边界并开始跳跃。倾斜时的动作也不是很平滑。有没有其他方法可以使这更顺畅?
答案 0 :(得分:2)
尝试将代码更改为Update
而不是FixedUpdate
。我猜测固定更新之间有多个更新。出于这个原因,该船在多个框架上首先越过边界,然后在下一个固定更新时返回。
使用Update
时,您需要自己处理增量时间。否则,不同fps的速度会有所不同。这可以通过简单地将速度乘以DeltaTime
:
public float xMin, xMax, yMin, yMax;
void Update()
{
//tilt to move ship
transform.Translate(Input.acceleration.x * speed * Time.DeltaTime, Input.acceleration.y * speed * Time.DeltaTime, 0);
//create boundries
transform.position = new Vector2(
Mathf.Clamp(transform.position.x, xMin, xMax),
Mathf.Clamp(transform.position.y, yMin, yMax)
);
}
与DeltaTime
相乘后,speed
的值可能太小了。所以你需要花一些时间再次为它找到合适的价值。