在 Unity 中,正交相机的size属性与屏幕尺寸存在特定的对应关系,具体如下:
基础对应关系
正交相机的size代表了摄像机在纵向上一半的显示范围,即屏幕高度的一半对应的 Unity 单位数量 。例如,若size设置为 5,那么摄像机在纵向可以显示 10 个 Unity 单位.
摄像机横向的显示范围则由屏幕的宽高比aspect决定,通过屏幕的宽度除以高度可获得camera.aspect,再通过纵向的显示范围乘以camera.aspect就能得到摄像机横向的显示范围,这样可以保证摄像机的显示范围能够覆盖整个屏幕.
像素与 Unity 单位的转换
在 Unity 中,像素和 Unity 单位之间的转换关系取决于导入素材时 “Pixels To Units” 这一属性的值,默认情况下该属性的数值为 100,即 100 像素等于 1 个 Unity 单位.
根据屏幕尺寸计算正交相机 size 的公式
当已知屏幕高度ScreenHeight和 “Pixels To Units” 的值时,若要使正交相机的显示范围刚好覆盖整个屏幕,正交相机的size计算公式为:
size = ScreenHeight / (2 * PixelsToUnits).
若已知期望的显示宽度Width和高度Height(以 Unity 单位为单位),则可以先将正交相机的size初始值设为 0.5,然后通过以下步骤计算得到正确的size值 :
先获取屏幕左上角和右上角的世界坐标点p0和p1,计算它们之间的距离f,若f大于 0,则
size *= Width / f 。
再获取屏幕左上角和左下角的世界坐标点p0和p1,计算它们之间的距离f,若f大于 0 且小于Height,则
size *= Height / f 。
实际应用中的注意事项
在不同的屏幕分辨率下,为了实现游戏元素的自适应显示,需要根据上述对应关系动态地调整正交相机的size以及游戏元素的缩放比例等.
当使用正交相机渲染 Sprite 时,若希望 Sprite 的大小与屏幕尺寸一致,且 Sprite 的 “Pixels Per Unit” 值为默认的 100,则正交相机的size应设置为
ScreenSize.H / 100 / 2.