如何计算屏幕位置

本文关键字:屏幕 位置 计算 何计算 | 更新日期: 2023-09-27 18:00:15

我正试图弄清楚Unity中的2D单元系统是如何工作的。我的游戏屏幕是800x450像素。

假设我希望我的对象位于左上角20,20像素处(因为它在大多数2D坐标系中都可以工作)。

我尝试过相机的两种"转换"方法,但都将我的物体放置在非常奇怪的位置,当然不是左上角20,20像素的位置。

我的代码:

    Vector3 test1 = Camera.main.ScreenToWorldPoint (new Vector3 (20, 20, 0));
    transform.position = test1;
    Vector3 test2 = Camera.main.WorldToScreenPoint (new Vector3 (20, 20, 0));
    transform.position = test2;

编辑

我做了一个以像素为单位的屏幕中心的测试。它将我的Z位置计算为10,但我的游戏完全是平的。一切都是二维的,我使用的是正交摄影机。

代码

Vector3 centerInPixels = Camera.main.WorldToScreenPoint (new Vector3 (0, 0, 0));
// this logs: 450,225,10
// so the pixel center is correct for 800x450, but the z is wrong.

如何计算屏幕位置

屏幕空间的坐标系为:左下=(0,0),右上(pixelWidth,pixelHeight)。所以据我所知,你们试图将物体放置到(20,像素高度-20)。那就是

Vector3 test1 = Camera.main.ScreenToWorldPoint (new Vector3 (20, Camera.main.pixelHeight-20, camera.nearClipPlane));
transform.position = test1;