在 Unity 2d 中使用坐标系和游戏屏幕?

问题描述 投票:0回答:2

所以我在其他平台上开发了游戏,其中 x/y 坐标系对我来说很有意义。左上角代表游戏屏幕,坐标为(0,0),右下角代表(宽度,高度)。现在我正在尝试跳转到 Unity 2d,但我无法理解游戏屏幕是如何工作的。如果我在屏幕上有一个背景对象和一个角色对象,当我围绕他的 x 和 y 值移动角色时,他的 x 和 y 值在 -3 和 3 之间变化...非常小的坐标,并且它与我设置的游戏分辨率不匹配( 1024x768)。有没有好的教程可以帮助您理解 Unity 中的游戏网格?或者谁能解释我如何才能完成我想做的事情?

unity-game-engine 2d game-engine
2个回答
22
投票

Unity中有三种坐标系:屏幕坐标、视图坐标和世界坐标。

世界坐标:使用“点”来思考场景中对象的绝对定位。您可以选择让单位代表您想要的任何长度,例如 1 单位 = 10 米。屏幕上实际显示的内容取决于相机的放置位置和方向。

视图坐标:给定相机视口中的坐标。视口是一个想象的矩形,通过它观察世界。这些坐标成比例,范围从 (0,0) 到 (1,1)。

屏幕坐标:表示设备屏幕上位置的实际像素坐标。

请注意,无论使用哪个相机查看,任何给定对象的世界坐标始终相同,而视图坐标取决于所使用的相机。屏幕坐标还取决于设备的分辨率以及相机视图在屏幕上的位置。

“Camera”对象提供了多种方法在这些不同的坐标系之间进行转换,例如“ScreenToViewportPoint”“ScreenToWorldPoint”等。

示例:将对象放置在屏幕左上角

float distanceFromCamera = 10.0f;
Vector3 pos = Camera.main.ScreenToWorldPoint (new Vector3 (0, Camera.main.pixelHeight, distanceFromCamera));

transform.position = pos;

ScreenToWorldPoint 
函数采用 Vector3 作为参数,其中 x 和 y 表示屏幕上的像素位置(0,0 是左下角),z 分量表示距相机的所需距离。无限多个 3D 位置可以映射到同一屏幕位置,因此您需要提供此值。

只需确保所需位置位于相机的剪辑区域内即可。此外,您可能需要为您的对象选择合适的枢轴,具体取决于您希望对象的哪一部分位于左上角。


4
投票

使用:

Camera.main.WorldToScreenPoint(transform.position);

让我将 GameObjects 变换位置转换为屏幕的 x 和 y 坐标系

© www.soinside.com 2019 - 2024. All rights reserved.