Eri*_*ith 13 2d game-engine unity-game-engine
所以我在x/y坐标系对我有意义的其他平台上开发了游戏.左上角表示坐标为(0,0)且右下角为(宽度,高度)的游戏画面.现在我正试图跳转到Unity 2d,我无法理解游戏画面是如何工作的.如果我在屏幕上有一个背景对象和一个角色对象,当我移动角色时,他的x和y值会在-3和3之间变化...非常小的坐标,它与我设置的游戏分辨率不匹配( 1024×768).有没有很好的教程来理解Unity中的游戏网格?或者任何人都可以解释我如何能够完成我想要做的事情?
son*_*age 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;
Run Code Online (Sandbox Code Playgroud)
该ScreenToWorldPoint
函数将Vector3作为参数,其中x和y表示屏幕上的像素位置(0,0是左下角),z分量表示距摄像机的所需距离.无限数量的3D位置可以映射到相同的屏幕位置,因此您需要提供此值.
只需确保所需位置位于相机的裁剪区域内.此外,您可能需要为对象选择合适的轴,具体取决于您想要在左上方居中的对象部分.