根据屏幕尺寸加速度计移动限制

时间:2017-11-11 14:49:25

标签: c# android unity3d accelerometer

我正在使用此代码:

void Update()
{
    accel = Input.acceleration.x;
    transform.Translate (0, 0, accel);
    transform.position = new Vector3 (Mathf.Clamp (transform.position.x,-6.9f, 6.9f), -4.96f, 18.3f);
}

它使我的gameObject以我想要的方式移动但问题是,当我将应用程序放在手机上时,(-6.9)(6.9)不是"结束"我的屏幕。我无法弄清楚如何根据每个屏幕尺寸更改这些值?

1 个答案:

答案 0 :(得分:0)

这将是一个更长的答案,所以请在这里忍受。

请注意,这篇文章假设您正在使用正交相机 - 使用的公式不适用于透视相机。

据我所知,您希望将对象保持在屏幕边界内。 Unity中的屏幕边界由相机尺寸和屏幕尺寸的组合决定。

float height = Camera.main.orthographicSize * 2;

相机的拼写尺寸决定了世界单位中屏幕尺寸的一半。将此值相乘会得出屏幕顶部和底部之间的世界单位数量。

要从此值中获取宽度,我们取值并将其乘以屏幕宽度除以屏幕高度。

float width = height * Screen.width / Screen.height;

现在我们有了屏幕的尺寸,但我们仍然需要将对象保持在这些边界内。

首先,我们创建一个Bounds类型的实例,我们将使用它来确定该位置的最大值和最小值。

Bounds bounds = new Bounds (Vector3.zero, new Vector3(width, height, 0));

请注意,我们使用了Vector3.zero,因为我们的边界实例的中心应该是世界的中心。这是您的对象应该能够在其中移动的区域的中心。

最后,我们根据我们产生的界限来夹住对象的位置值。属性。

Vector3 clampedPosition = transform.position;
clampedPosition.x = Mathf.Clamp(clampedPosition.x, bounds.min.x, bounds.max.x);
transform.position = clampedPosition;

这应确保您的对象永远不会离开屏幕的边界!