Unity竖屏模式下如何设置正交相机水平宽度固定为5米
实现逻辑与解决方案
固定水平宽度为5米的核心原理
Unity中正交相机的orthographicSize参数对应的是相机视口垂直方向一半高度的世界单位长度。例如orthographicSize = 2时,相机视口从上边界到下边界的总世界长度为4米。
相机水平方向的总可视宽度计算公式为:水平总宽度 = 2 * orthographicSize * (Screen.width / (float)Screen.height)
你要求水平总宽度固定为5米,反过来推导即可得到orthographicSize的取值:orthographicSize = (目标水平总宽度 / 2) / (Screen.width / (float)Screen.height)
这里目标总宽度为5,代入后公式为orthographicSize = 2.5f / (Screen.width * 1f / Screen.height)
适配代码(无gameField对象版本)
void Start() { AdjustCameraSize(); } // 屏幕旋转、分辨率变化时直接调用该方法即可更新适配 void AdjustCameraSize() { // 固定水平总宽度为5米 const float targetHorizontalWidth = 5f; float screenAspect = Screen.width / (float)Screen.height; Camera.main.orthographicSize = (targetHorizontalWidth / 2f) / screenAspect; }
原有参考代码逻辑说明
你找到的代码是「将指定Sprite的完整内容适配到相机视口」的专用逻辑,运行逻辑如下:
- 先计算当前屏幕的宽高比,再计算目标Sprite的宽高比
- 如果屏幕比Sprite更宽,就固定相机垂直高度等于Sprite的高度,此时视口左右会留空
- 如果屏幕比Sprite更窄,就缩放相机垂直高度,保证Sprite的宽度能完整塞到视口内,此时视口上下会留空
这段代码依赖固定尺寸的Sprite作为参照物,你的项目是无限卷轴没有固定参照物,因此完全不适用。
为什么Unity不自动处理这类适配
Unity没有内置自动适配是因为2D游戏的适配需求差异极大:
- 部分横版游戏要求固定垂直高度,水平方向多出来的部分显示更多场景内容
- 部分竖版游戏要求固定水平宽度,垂直方向多出来的部分显示更多内容
- 部分游戏要求内容不能裁切,不管比例必须完整显示所有预设内容
- 部分游戏要求满屏无黑边,允许裁切边缘内容
Unity无法预设所有适配策略,所以只开放基础的相机参数,由开发者根据自己的需求实现对应适配逻辑。
内容的提问来源于stack exchange,提问作者S.A.Parkhid
相关产品推荐
相关产品推荐

