在通用渲染管线(URP)中,多个基础相机(Base Camera)或相机栈(Camera Stack)可渲染至同一渲染目标,从而实现分屏效果。
注意:若多个基础相机或相机栈渲染至同一目标的重叠区域,Unity 会多次绘制重叠像素。优先级最高的相机或相机栈最后渲染,覆盖之前的像素。
(一).分屏核心设置 —— 视口矩形(Viewport Rect)
通过基础相机的 Viewport Rect 属性定义渲染目标的区域。
(二).分屏渲染设置步骤
(以左右分屏为例)
操作步骤:
-
创建第一个基础相机
- 在场景中创建相机,其渲染模式默认为 Base(基础相机)。
- 选中相机,在 Inspector 窗口的输出(Output) 部分,将视口矩形设置为:
plaintext
X: 0 (左边界) Y: 0 (下边界) W: 0.5 (宽度,占屏幕50%) H: 1 (高度,占屏幕100%)
- 该相机将渲染至屏幕左侧区域。
-
创建第二个基础相机
- 再创建一个相机,同样为 Base 模式。
- 设置视口矩形为:
plaintext
X: 0.5 (右边界起始) Y: 0 (下边界) W: 0.5 (宽度) H: 1 (高度)
- 该相机将渲染至屏幕右侧区域。
代码中设置视口矩形
可通过脚本动态修改相机的视口矩形:
csharp
// 获取UniversalAdditionalCameraData组件
UniversalAdditionalCameraData cameraData = myCamera.GetComponent<UniversalAdditionalCameraData>();
// 设置视口矩形(示例:右半屏)
cameraData.rect = new Rect(0.5f, 0f, 0.5f, 1f);
(三).进阶分屏方案
- 上下分屏:将第二个相机的 Y 设为 0.5,H 设为 0.5。
- 四等分屏:设置 4 个相机的视口矩形分别为:
plaintext
左上:X=0, Y=0.5, W=0.5, H=0.5 右上:X=0.5, Y=0.5, W=0.5, H=0.5 左下:X=0, Y=0, W=0.5, H=0.5 右下:X=0.5, Y=0, W=0.5, H=0.5
- 非对称分屏:调整 W/H 值实现不规则分割(如主视角占 70%,小地图占 30%)。
性能优化建议
- 优先级设置:为分屏相机设置不同优先级(Priority),避免重叠区域重复绘制。
- 图层隔离:通过 Culling Mask 让各相机仅渲染对应图层(如玩家 1 相机只渲染玩家 1 相关对象)。
- 分辨率控制:降低分屏相机的 Render Texture 分辨率(尤其在移动端)。
分屏渲染适用于本地多人游戏、多视角监控或战术策略游戏的多地图同步显示场景。