我刚开始玩团结。然而,我还没有考虑坐标系。我已经阅读了各种问题/答案,文档,观看过的教程。当我阅读文档时,世界,视口和屏幕坐标是有意义的。然而,当我尝试使用它们时,结果对我来说完全令人惊讶。这让我觉得我错过了一些至关重要的东西。有人会帮我吗?
这是我想要做的。我正在尝试构建一个游戏,它将在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);
答案 0 :(得分:0)
我认为你的瓷砖定位正确,但相机不是。
默认情况下,摄像机的位置使坐标系的中心位于屏幕的中心。尝试重新定位相机(在开始方法中程序化或仅通过统一GUI)
希望这有所帮助。 :)