无法以编程方式在左下角放置精灵

时间:2017-02-06 08:35:40

标签: coordinates unity2d

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

这是我想要做的。我正在尝试构建一个游戏,它将在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;

以下是上述代码的输出:

enter image description here

正如人们可以看到那件作品放在中间位置。我很清楚我没有“标准化”坐标。下面的代码版本将屏幕点转换为世界坐标:

 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;

但是结果仍然有点类似于第一个,尽管片段略微向左下方放置。

enter image description here

我期待这件作品放在左下角,但事实并非如此。我做错了什么?

提前致谢。

编辑:

以下是我正在使用的相机的默认设置:

enter image description here

我也尝试在代码中设置它,在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);

1 个答案:

答案 0 :(得分:0)

我认为你的瓷砖定位正确,但相机不是。

默认情况下,摄像机的位置使坐标系的中心位于屏幕的中心。尝试重新定位相机(在开始方法中程序化或仅通过统一GUI)

希望这有所帮助。 :)