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

Accelerometer movement limit according to screen size

我正在使用此代码:

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

它让我的游戏对象按照我想要的方式移动,但问题是当我将应用程序放在我的 phone 上时,(-6.9)(6.9) 不是 "ends" 我的屏幕。而且我无法弄清楚如何根据每个屏幕尺寸更改这些值?

这个回答会有点长,所以请多多包涵。

请注意,此 post 假设您使用的是 正交 相机 - 使用的公式不适用于透视相机。

据我所知,您希望将对象保持在屏幕边界内。 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;

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