You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:27:03