所以我在x / y坐标系对我有意义的其他平台上开发了游戏。左上角表示坐标为(0,0)且右下角为(宽度,高度)的游戏画面。现在我正试图跳转到Unity 2d,我无法理解游戏画面是如何工作的。如果我在屏幕上有一个背景对象和一个角色对象,当我移动角色时,他的x和y值会在-3和3之间变化...非常小的坐标,它与我设置的游戏分辨率不匹配( 1024×768)。有没有很好的教程来理解Unity中的游戏网格?或者任何人都可以解释我如何才能完成我想要做的事情?
答案 0 :(得分:18)
Unity中有三个坐标系:屏幕坐标,视图坐标和世界坐标。
世界坐标:使用“点”来考虑场景中物体的绝对位置。您可以选择让单位表示您想要的任何长度,例如1个单位= 10米。屏幕上实际显示的内容取决于相机的放置位置和方向。
查看坐标:给定摄像机视口中的坐标。视口是想象中的矩形,通过它看世界。这些坐标是porportional,范围从(0,0)到(1,1)。
屏幕坐标:表示设备屏幕位置的实际像素坐标。
请注意,无论使用哪个摄像机查看,任何给定对象的世界坐标始终相同,而视图坐标取决于所使用的摄像机。屏幕坐标还取决于设备的分辨率和摄像机视图在屏幕上的位置。
“Camera”对象提供了几种在不同坐标系之间进行转换的方法,如“ScreenToViewportPoint”“ScreenToWorldPoint”等。
示例:将对象放在屏幕的左上角
float distanceFromCamera = 10.0f;
Vector3 pos = Camera.main.ScreenToWorldPoint (new Vector3 (0, Screen.height, distanceFromCamera));
transform.position = pos;
ScreenToWorldPoint
函数将Vector3作为参数,其中x和y表示屏幕上的像素位置(0,0是左下角),z分量表示距摄像机的所需距离。无限数量的3D位置可以映射到相同的屏幕位置,因此您需要提供此值。
确保所需位置位于相机的裁剪区域内。此外,您可能需要为对象选择合适的轴,具体取决于您想要在左上方居中的对象部分。
答案 1 :(得分:3)
使用:
Camera.main.WorldToScreenPoint(transform.position);
让我将GameObjects转换位置转换为屏幕的x和y坐标系