0

我刚刚开始玩团结。然而,我还没有考虑到坐标系。我已阅读各种问题/答案、文档、观看教程。当我阅读文档时,世界、视口和屏幕坐标是有意义的。然而,当我尝试使用这些时,结果对我来说完全令人惊讶。这让我觉得我错过了一些根本上重要的东西。有人可以帮帮我吗?

这是我想要做的。我正在尝试构建一个游戏,它将在大小为 MxN 的板上有 X 个棋子。我想以编程方式放置碎片。所以,当我将一块放在(0,0)屏幕坐标上时,我希望在左下角看到一块。但令我惊讶的是,棋子大约位于棋盘的中央。我不知道为什么。

这是我的代码:

 Vector3 BottomLeft = new Vector3 (0, 0, 0);
 GameObject token = Prefabs[0];
 GameObject go = Instantiate (token, BottomLeft , Quaternion.identity);
 SpriteRenderer renderer = go.GetComponent<SpriteRenderer> ();
 renderer.sortingLayerName = "Foreground";
 renderer.sortingOrder = 0;

下面是上面代码的输出:

在此处输入图像描述

正如人们所看到的那样,这块被放置在中心。我很清楚我没有“标准化”坐标。以下版本的代码将屏幕点转换为世界坐标:

 Vector3 BottomLeft = new Vector3 (0, 0, 0);
 GameObject token = Prefabs[0];
 GameObject go = Instantiate (token, Camera.main.ScreenToWorldPoint( BottomLeft ), Quaternion.identity);
 SpriteRenderer renderer = go.GetComponent<SpriteRenderer> ();
 renderer.sortingLayerName = "Foreground";
 renderer.sortingOrder = 0;

但结果仍然与第一个相似,尽管棋子稍微向左和向下放置。

在此处输入图像描述

我原以为这件作品会放在左下角,但事实并非如此。我究竟做错了什么 ?

提前致谢。

编辑:

以下是我正在使用的凸轮的默认设置:

在此处输入图像描述

我也尝试在代码中设置它,在 start 方法中如下:(请不要说我尝试了任何一行,结果仍然相同:[)

//      defaultCamera.transform.position = defaultCamera.ScreenToWorldPoint( new Vector3 (Screen.width / 2f, Screen.height / 2f, 0f));
//      defaultCamera.transform.position = defaultCamera.ScreenToWorldPoint( new Vector3 (-Screen.width / 2f, -Screen.height / 2f, 0f));
        //defaultCamera.transform.position = new Vector3 (-Screen.width / 2f, -Screen.height / 2f, -10f);
        defaultCamera.transform.position = new Vector3 (0f, 0f, -10f);
4

1 回答 1

0

我认为您的瓷砖位置正确,但相机没有。

默认情况下,相机的位置使坐标系的中心位于屏幕的中心。尝试重新定位相机(在启动方法中以编程方式或仅通过统一 GUI)

希望这有所帮助。:)

于 2017-02-06T12:12:42.310 回答