在屏幕上以不同的分辨率/宽高比(正交)定位对象

时间:2014-03-12 22:10:07

标签: c# unity3d

老实说,我对Unity中的世界,屏幕和视口坐标很遗憾。
我的问题很简单:在2D游戏中,无论分辨率和屏幕宽高比如何,我如何在左下角放置一个物体?

2 个答案:

答案 0 :(得分:2)

你的描述有点模糊,但我认为你在谈论这个:

Vector3 screenPos = new Vector3(x,y,z);

camera.ScreenToWorldPoint(screenPos);

作为旁注,2D Unity有特定的算法,也可以搜索它。

对于正交检查这个统一空间可能会对你有所帮助:

http://answers.unity3d.com/questions/501893/calculating-2d-camera-bounds.html

答案 1 :(得分:1)

我看到没有人跟进此事。让我们先得到一些条款: Camera.main =正在查看游戏世界的主摄像头 "游戏世界" =您绘制的整个游戏地图 World Point =游戏世界中绝对的,独特的位置。可以是2D或3D(x,y,z) 屏幕点=屏幕上像素的2D x,y位置

所以,当你想要放置一个物体(即转换它的位置)时,你真正在做的就是把它放在游戏世界的某个地方。如果相机恰好在世界中查看该位置,那么它将出现在屏幕上。

要弄清楚当前世界的哪些部分在屏幕上,您必须将屏幕点转换为世界点。所以...假设你的对象的大小是20x20,试试这个:

//Attach this script to the item you want "pinned" to the bottom, left corner of the screen
void Update() {
  //fetch the rectangle for the whole screen
  Rect viewportRect = Camera.main.pixelRect; //again, this has nothing to do with the World, just the 2D screen "size", basically

  //now, let's pick out a point on the screen - bottom, left corner - but leave room for the size of our 20x20 object
  Vector3 newPos = new Vector3(viewportRect.xMin + 20, Camera.main.pixelHeight - 20, 0);

  //now calculate where we need to place this item in the World so that it appears in our Camera's view (and, thus, the screen)
  this.transform.position = Camera.main.ScreenToWorldPoint(newPos);
}

我98%确定这都是准确的信息,但如果有人发现错误,请指出。