老实说,我对Unity中的世界,屏幕和视口坐标很遗憾。
我的问题很简单:在2D游戏中,无论分辨率和屏幕宽高比如何,我如何在左下角放置一个物体?
答案 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%确定这都是准确的信息,但如果有人发现错误,请指出。