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

Ada*_*cio 21 c# unity-game-engine

在2d模式下使用Unity 4.3我有一个GameObject,它是一个精灵(在我设置精灵的SpriteRenderer中),我试图将它放在屏幕的左上角.

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

我缺少的是坐标系统是如何工作的,我习惯于使用坐标系中的像素,其中0,0从左下角或左上角开始.

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

所以问题是:为什么我的精灵宽度是1.06?我该如何在这个系统中完美地定位东西?

想象一下,我想在正左上方放置一个128px*128px的正方形,我该怎么办呢?

ard*_*ian 37

您可能需要注意的第一件事是,当您将图像作为纹理类型=精灵导入统一时,有一个属性"像素到单位",您将在精灵资源上看到.

在此输入图像描述

所以你的128px,如果保留默认设置,将是1.28"单位"宽.这个值与你的1.06的测量值不符,所以我不确定它来自哪里.这可能是因为您的精灵对象的比例不均匀,或者可能是因为您的"像素到单位"设置已被修改.在检查器中仔细检查您的输入纹理实际上是128x128,并检查Pixel to Units值是否符合预期.

接下来,请注意,正交相机的"尺寸"对应于其高度的一半.

因此,在下图中,正射相机将在白色框中看到该区域.5号,意味着10个单位高.我在场景中的花的图片是128像素宽,96像素高的图像,以默认设置(1单位= 100像素)导入.

在此输入图像描述

现在我不确定您的确切用例是什么(也许这可能是使用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;        
}
Run Code Online (Sandbox Code Playgroud)