Unity 4.3 - 了解位置和屏幕分辨率,如何正确设置对象的位置?
Posted
技术标签:
【中文标题】Unity 4.3 - 了解位置和屏幕分辨率,如何正确设置对象的位置?【英文标题】:Unity 4.3 - understanding positions and screen resolution, how to properly set position of object? 【发布时间】:2014-04-30 21:43:05 【问题描述】:在 2d 模式下使用 Unity 4.3 我有一个游戏对象,它是一个精灵(在 SpriteRenderer 中我设置了精灵),我试图将它定位在屏幕的左上角。
我想让这个精灵在每个分辨率中都位于左上角(例如)(我有 ios 作为构建目标,所以在我的情况下,我说的是 iPhone 所有分辨率,视网膜,非视网膜, iPad 等)。
我缺少的是坐标系的工作原理,我习惯于使用坐标系中的像素,其中 0,0 从左下角或左上角开始。
在 Unity 4.3 中,0,0 似乎在中心(这显然不是一个大问题),但让我感到困惑的是,如果我打印对象的宽度(即 128 像素),我会得到一个1.06 作为值,我想屏幕也细分为“点”,所以左边是-3,右边是 +3
所以问题是:为什么我的精灵宽度是 1.06 ?我应该如何在这个系统中完美定位?
假设我想在左上角准确定位一个 128px*128px 的正方形,我该怎么做?
【问题讨论】:
您是否正在考虑在您的场景中提供 2D 图形?如果是这样,您需要在正交投影中设置相机。完成后,您可以指定视图矩阵,当 Unity 将您的矩阵相乘时,将为您计算截锥体。试试这个论坛帖子:forum.unity3d.com/threads/… 或这个:answers.unity3d.com/questions/28533/… - 虽然它们不是教程,但你应该能够从中获取正交设置的代码 您对camera.transform
最感兴趣
当你说'如果我打印我的对象的宽度'时,你用什么方法来计算这个宽度?
我正在使用这个:myObject.GetComponent您可能要注意的第一件事是,当您将图像导入统一为 Texture Type = Sprite 时,有一个属性“Pixels To Units”,您将在 sprite 资产上看到该属性。
因此,如果保留默认设置,您的 128 像素将是 1.28“单位”宽。但是,此值与您的 1.06 测量值不对应,因此我不确定它来自何处。这可能是因为您的精灵对象的比例不统一,也可能是因为您的“像素到单位”设置已被修改。在检查器中仔细检查您的输入纹理实际上是 128x128,并检查 Pixel to Units 值是否符合您的预期。
接下来,请注意正交相机的“尺寸”对应于其高度的一半。
所以在下图中,正射相机将看到白框中的区域。尺寸 5,意味着 10 个单位高。我在场景中的花朵图片是 128 像素宽 x 96 像素高的图像,以默认设置导入(1 个单位 = 100 像素)。
现在我不确定您的确切用例是什么(即,也许这是使用 GUITexture 更好地解决的问题)。但是,假设您要使用 Sprite,并且您希望它位于左上角的每一帧,并且您希望该 sprite 始终以本机分辨率显示,那么以下代码将执行此操作。将其添加到附加到 Sprite 游戏对象的脚本中。
// Update is called once per frame
void Update ()
float camHalfHeight = Camera.main.orthographicSize;
float camHalfWidth = Camera.main.aspect * camHalfHeight;
Bounds bounds = GetComponent<SpriteRenderer>().bounds;
// Set a new vector to the top left of the scene
Vector3 topLeftPosition = new Vector3(-camHalfWidth, camHalfHeight, 0) + Camera.main.transform.position;
// Offset it by the size of the object
topLeftPosition += new Vector3(bounds.size.x / 2,-bounds.size.y / 2, 0);
transform.position = topLeftPosition;
【讨论】:
谢谢,你的答案是正确的,一切都如你所说,顺便说一下,图像是正确的 128 像素,现在我已经将“像素到单位”设置为 100 正在打印正确的宽度。不再是 1.06 而是 1.28 !但我有一个小问题,我将 5 * 128px 图像放在 640x960 res 区域中,但是 5 个正方形并没有完全填满我用相机看到的宽度...... 5 x 128 = 640,这里有什么问题?如果我让我的小队从中心开始,我会在左右两边看到一个边距,似乎相机正在渲染一个宽度大于 640 的区域,为什么? 明白了,我必须将相机尺寸设置为 4.8,现在可以正常使用了! 嗯,这对我不起作用。我的屏幕分辨率是 800x450。如果我计算左上角的位置(相当于 0,0 的像素),我的精灵位置太高了,而且离左边有点太远了……我错过了什么?我正在使用 Unity 中最基本的教程设置。 嗨@Kokodoko。这应该可行,(我假设,鉴于对这个问题的赞成票)。请发布另一个问题并包含附加到游戏对象的源代码。您的评论中没有足够的信息让我帮助您。 - 编辑,我看到你的问题得到了回答,为其他人链接:***.com/a/31117334/2770333以上是关于Unity 4.3 - 了解位置和屏幕分辨率,如何正确设置对象的位置?的主要内容,如果未能解决你的问题,请参考以下文章