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)
| 归档时间: |
|
| 查看次数: |
31545 次 |
| 最近记录: |