我刚刚开始玩团结。然而,我还没有考虑到坐标系。我已阅读各种问题/答案、文档、观看教程。当我阅读文档时,世界、视口和屏幕坐标是有意义的。然而,当我尝试使用这些时,结果对我来说完全令人惊讶。这让我觉得我错过了一些根本上重要的东西。有人可以帮帮我吗?
这是我想要做的。我正在尝试构建一个游戏,它将在大小为 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);