Unity 相机:正交 (Orthographic) vs 透视 (Perspective)
Unity 相机:正交 (Orthographic) vs 透视 (Perspective)
核心区别
| 正交 (Orthographic) | 透视 (Perspective) | |
|---|---|---|
| 视觉效果 | 无近大远小,物体大小与距离无关 | 有近大远小,模拟人眼/真实相机 |
| 投影方式 | 平行投影 | 锥形投影 |
| 适用场景 | 2D 游戏、UI、建筑蓝图、像素风 | 3D 游戏、FPS、写实场景 |
| 深度感 | 无(或很弱) | 强 |
| 性能 | 略优(计算简单) | 略低 |
图示对比
plain
透视 (Perspective) 正交 (Orthographic)📷 📷/|\ |===|/ | \ | |/ | \ | | ← 视锥体是长方体
/ | \ | |
🟦 🟦 🟦 🟦🟦🟦
近大 中 远小 一样大
Inspector 参数
| 参数 | 正交 | 透视 |
|---|---|---|
| Projection | Orthographic |
Perspective |
| Size | 控制视口高度的一半(单位:世界单位) | — |
| Field of View (FOV) | — | 控制视野角度(默认 60°) |
代码切换
Camera cam = GetComponent<Camera>();// 切换为正交 cam.orthographic = true; cam.orthographicSize = 5f; // 视口半高 = 5 世界单位// 切换为透视 cam.orthographic = false; cam.fieldOfView = 60f;
实际应用
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 横版 2D 游戏(如马里奥) | 正交 | 角色大小不随距离变化 |
| 俯视角 2D(如星露谷物语) | 正交 | 保持比例一致 |
| UI 相机 | 正交 | 元素大小固定 |
| 3D FPS / 开放世界 | 透视 | 真实深度感 |
| 等距视角 3D(如暗黑破坏神) | 正交 或 透视小 FOV | 风格化选择 |
| 建筑可视化 | 正交 | 精确测量,无变形 |
一个细节:正交下的"深度"
正交相机没有透视缩短,但仍有 Z 轴(深度):
-
用于 Sorting Layer 和 Order in Layer 决定渲染顺序
-
用于 遮挡关系(前面的物体挡住后面的)
// 正交下,物体远近不影响大小,但影响遮挡 transform.position = new Vector3(x, y, z); // z 决定前后层级
混合使用技巧
很多游戏会同时使用两个相机:
| 相机 | 模式 | 用途 | Depth |
|---|---|---|---|
| 主相机 | 透视 | 渲染 3D 世界 | 0 |
| UI 相机 | 正交 | 渲染血条、菜单 | 1 |
// UI 相机设置 Camera uiCam = ...; uiCam.orthographic = true; uiCam.clearFlags = CameraClearFlags.DepthOnly; // 不清理颜色缓冲 uiCam.cullingMask = LayerMask.GetMask("UI");