这将是一个较长的答案,所以请在这里忍受我。
请注意,本文假设您使用正交相机 - 使用的公式不适用于透视相机。
据我所知,你的愿望是保持你的对象在屏幕边界内。 Unity中的屏幕边界由相机尺寸和屏幕尺寸的组合决定。
float height = Camera.main.orthographicSize * 2;
相机的正投影尺寸决定世界单位屏幕的尺寸的一半。乘以这个值将导致屏幕顶部和底部之间的世界单位数量。
要从此值获得宽度,我们将该值乘以屏幕宽度除以屏幕高度。
float width = height * Screen.width/Screen.height;
现在我们有我们屏幕的尺寸,但我们仍然需要保持对象在这些边界内。
首先,我们创建一个Bounds
类型的实例,我们将使用该实例确定该位置的最大值和最小值。我们使用Vector3.zero
因为我们的边界实例的中心
Bounds bounds = new Bounds (Vector3.zero, new Vector3(width, height, 0));
注应该是世界的中心。这是你的物体应该能够在里面移动的区域的中心。
最后,根据我们得到的界限的属性,我们限制对象的位置值。
Vector3 clampedPosition = transform.position;
clampedPosition.x = Mathf.Clamp(clampedPosition.x, bounds.min.x, bounds.max.x);
transform.position = clampedPosition;
这应该确保您的对象永远不会离开屏幕的边界!
使用'Screen.width'和'Screen.height'并尽量避免硬编码变量。 –
感谢您的回放。你能解释如何使用screen.width和height吗? –
我会尝试,但是我没有足够的信息来帮助您在上下文中使用它。你能发布你想要实现的图像吗? –