Unity C#:如何在屏幕位置创建GameObject?

时间:2017-01-01 19:52:16

标签: c# unity3d screen

与德尔福相比,Unity是如此困难。在delphi中你可以说:

Rectangle1.Position.Y := 0;
Rectangle1.Position.X := screen.Width - Rectangle1.Width;

这只会将矩形的位置更改为屏幕的右上角。但在Unity中,要做到这一点还有很多东西需要学习,我不知道从哪里开始。有人可以向我简化这个吗?我只想在屏幕的右上角创建一个对象,包括智能手机和个人电脑。

我正在使用Unity2D

编辑:这是我要创建的对象的Inspector: enter image description here

这是我用来在屏幕上创建对象的代码:

Instantiate(objectName, new Vector3(0, 0, 0), Quaternion.identity);

编辑更清晰:enter image description here

2 个答案:

答案 0 :(得分:4)

摄像机的屏幕坐标与世界坐标不同(一个有2个维度,另一个有3个。一个使用像素和其他Unity单位)。

我会使用Camera.ScreenToWorldPoint

对文档进行评论:

  

Camera.ScreenToWorldPoint(position:Vector3)将屏幕空间的位置转换为世界空间。

     

屏幕空间以像素为单位定义。屏幕的左下角是(0,0);右上角是(pixelWidth,pixelHeight)。 z位置是相机的世界单位。

所以将你的Rectangle以与你描述的方式类似的方式放在角落里(使用伪代码C#mix):

Vector3 p = camera.ScreenToWorldPoint(new Vector3(0, Screen.height, HowFarFromCamera));
Rectangle1.position = new Vector3(p.x + Rectangle1.Width/2,p.y - Rectangle1.Height/2,p.z);

p 是世界坐标的角落(这是重要的事情)。假设您的矩形枢轴位于中间,我按宽度/ 2和高度/ 2移动。

注意:您可以使用Bounds.size来获取宽度或高度(Renderer和SpriteRenderer都可用的结构)

答案 1 :(得分:1)

我给你的另一个建议,因为你似乎只专注于2D(查看你的其他帖子)是寻找Unity UI系统(在4.6中发布:许多人将其称为UI 4.6):

  • 您可以找到关于 Canvas 和其他UI组件的大量信息here
  • Here你会找到开始使用它的基本教程。

您的想法是可以将对象锚定在画布中:在您的情况下,您只需要将图像锚定到所需的角落,然后将其抵消宽度/高度的一半(您还可以将对象枢轴点设置为右角并将其锚定到匹配的角落,而不必将其偏移)。