因此,我已经在其他平台上开发了游戏,这些平台对我来说x / y坐标系很有意义。左上角代表(0,0)坐标的游戏屏幕,右下角是(width,height)。现在,我试图跳到Unity 2d,但我不明白游戏屏幕的工作原理。如果我在屏幕上有一个背景对象和一个角色对象,则当我将角色移动到他的x和y值时,其值在-3和3之间变化...非常小的坐标,并且与我设置的游戏分辨率不符( 1024x768)。有没有很好的教程来了解Unity中的游戏网格?还是有人可以解释我如何完成我想做的事情?
Unity中有三个坐标系:屏幕坐标,视图坐标和世界坐标。
世界坐标:使用“点”考虑场景中对象的绝对位置。您可以选择使单位代表您想要的任何长度,例如1个单位= 10米。屏幕上实际显示的内容取决于相机的放置位置和方向。
查看坐标:给定摄像机视口中的坐标。视口是虚构的矩形,通过该矩形可以查看世界。这些坐标是比例的,范围从(0,0)到(1,1)。
屏幕坐标:表示设备屏幕上位置的实际像素坐标。
请注意,无论使用哪个摄像机进行查看,任何给定对象的世界坐标都将始终相同,而查看坐标取决于所使用的摄像机。屏幕坐标还取决于设备的分辨率和摄像机视图在屏幕上的位置。
“相机”对象提供了几种在这些不同坐标系之间进行转换的方法,例如“ 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位置可以映射到同一屏幕位置,因此您需要提供此值。
只要确保所需位置在相机的剪切区域内即可。另外,您可能需要为对象选择合适的枢轴,具体取决于您希望对象的哪一部分位于左上方。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句