根据屏幕尺寸的加速度计移动限制
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;
这应该确保您的对象永远不会离开屏幕的边界!
我正在使用此代码:
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;
这应该确保您的对象永远不会离开屏幕的边界!