Unity2D的camera size

2016年10月19日 17:11 0 点赞 0 评论 更新于 2025-11-21 20:39

在 2D 游戏开发中,常常会使用平行投影的相机(Camera)。对于这种相机,需要设置其 size(即 orthographicSize)属性。orthographicSize 的含义是屏幕高度的一半,不过其单位并非像素,而是通过 pixels to units 换算后的单位坐标(Unit Coordinates)。

例如,当屏幕高度为 640 像素,pixels to units 为 100 时,orthographicSize 的值为 640 / 2 / 100 = 3.2

单位坐标可以理解为一种统一化的坐标体系,开发者无需过多关注其实际的物理含义,它主要为游戏的各个组成部分提供一个统一的坐标参考。相应地,精灵(Sprite)的尺寸也可以通过 pixels to units 换算为单位坐标,并且每个精灵都能单独设置该换算比例,这为游戏资源的调整增加了一个灵活的参数。

屏幕多分辨率适配问题

这里涉及到屏幕多分辨率适配的问题,常见的适配方式有两种:

  • 固定高度:将 orthographicSize 的值固定下来,然后动态调整相机的宽度值,再根据宽度值来适配各种 UI 元素。
  • 固定宽度:根据屏幕宽度值,动态计算出高度值,然后设置 orthographicSize

Camera Size 对显示区域的影响

设置相机的 orthographicSize 实际上控制了相机显示区域的大小。orthographicSize 的值越大,相机能看到的游戏世界范围就越大,但由于实际屏幕大小是固定的,所以游戏世界中的精灵会相应地缩小。

当相机处于正交(Orthographic)模式时,如果 camera size 为 5.57,经过测量可知,视图中视截体(Frustum)的高度是 5.57 * 2

视截体宽度的计算

那么视截体的宽度是如何决定的呢?我们可以通过一个试验来探究。假设前面选择的屏幕尺寸为 Web(600x900),此时视截体宽度的计算公式为:视截体宽度 = 视截体高度 / 900 600。在上述例子中,视截体宽度为 `5.57 2 / 900 * 600 = 7.426`,经测量,该计算结果是正确的。

另外,如果调整相机的 Viewport RectWH 值,也会对视截体的形状产生影响。但只要 H 不为 0,视截体的高度就始终等于 2 * orthographicSize(例如 5.57 * 2),因此有意义的是 WH 的比值。

总结

在正交(Orthographic)模式下,视截体尺寸的计算公式如下:

  • 视截体高度 = camera.orthographicSize * 2
  • 视截体宽度 = 视截体高度 (屏幕宽度 / 屏幕高度) (相机视口矩形的宽度 / 相机视口矩形的高度)

代码示例

计算相机的单位尺寸

var camera = camera_obj.GetComponent<Camera>();
float orthographicSize = camera.orthographicSize;
float aspectRatio = Screen.width * 1.0f / Screen.height;

float cameraHeight = orthographicSize * 2;
float cameraWidth = cameraHeight * aspectRatio;
Debug.Log("camera size in unit=" + cameraWidth + "," + cameraHeight);

获取精灵的单位尺寸

Vector2 spriteSize = sprite_obj.GetComponent<SpriteRenderer>().sprite.bounds.size;

通过以上内容,我们详细了解了 Unity 2D 中相机 orthographicSize 的含义、视截体尺寸的计算方法以及相关的代码实现,这些知识对于 2D 游戏的开发和多分辨率适配具有重要的指导意义。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章