gpt4 book ai didi

c# - Unity 4.3 - 了解位置和屏幕分辨率,如何正确设置对象的位置?

转载 作者:IT王子 更新时间:2023-10-29 04:33:48 26 4
gpt4 key购买 nike

在 2d 模式下使用 Unity 4.3 我有一个 GameObject,它是一个 Sprite (在 SpriteRenderer 中我已经设置了 Sprite ),我试图将它定位在屏幕的左上角。

我想让这个 Sprite 在每个分辨率下都位于左上角(例如)(我有 iOS 作为构建目标,所以在我的例子中我说的是 iPhone 所有分辨率,视网膜,非视网膜, iPad 等)。

我缺少的是坐标系的工作原理,我习惯于在坐标系中处理像素,其中 0,0 从左下角或左上角开始。

在 Unity 4.3 中,0,0 似乎在中心(这显然不是一个大问题)但让我感到困惑的是,如果我打印对象的宽度(即 128px),我会得到一个1.06 作为值,我想屏幕也被分割为“点”,所以左边是 -3,右边是 +3

所以问题是:为什么我的 Sprite 宽度是 1.06 ?我应该如何在这个系统中完美地定位事物?

假设我想在左上角放置一个 128px*128px 的正方形,我该怎么做?

最佳答案

您可能要注意的第一件事是,当您将图像作为 Texture Type = Sprite 导入 unity 时,有一个属性“Pixels To Units”,您将在 sprite Assets 上看到该属性。

enter image description here

因此,如果保留默认设置,您的 128px 将是 1.28“单位”宽。但是,此值与您测量的 1.06 不符,因此我不确定它的来源。这可能是因为您的 sprite 对象的比例不统一,或者可能是因为您的“像素到单位”设置已被修改。在检查器中仔细检查您的输入纹理实际上是 128x128,并检查 Pixel to Units 值是否符合您的预期。

接下来,请注意正交相机的“大小”对应于其高度的一半。

因此在下图中,正射相机将看到白框中的区域。尺寸 5,表示 10 个单位高。我在场景中的一朵花的图片是一张 128 像素宽 x 96 像素高的图像,以默认设置导入(1 个单位 = 100 像素)。

enter image description here

现在我不确定您的确切用例是什么(即,也许使用 GUITexture 可以更好地解决这个问题)。然而假设你想使用一个 Sprite,并且你希望它在左上角的每一帧,并且你希望那个 sprite 总是显示在原生 res 上,那么下面的代码就可以做到。将其添加到附加到 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;
}

关于c# - Unity 4.3 - 了解位置和屏幕分辨率,如何正确设置对象的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22594074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com