我正在使用此代码:
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)
不是"结束"我的屏幕。我无法弄清楚如何根据每个屏幕尺寸更改这些值?
答案 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;
这应确保您的对象永远不会离开屏幕的边界!