在Unity里面,ScreenSpaceOverlay和ScreenSpaceCamera
在Unity中,Screen Space - Overlay
和 Screen Space - Camera
是UI画布(Canvas)的渲染模式,二者存在以下区别:
渲染原理
- Screen Space - Overlay:这种模式下,UI会直接渲染在屏幕最上层,与场景中的摄像机设置无关。无论场景摄像机的位置、角度和视野如何,UI都会覆盖在整个屏幕上,并且不会被场景中的物体遮挡。
- Screen Space - Camera:此模式下,UI会根据指定的摄像机进行渲染,被渲染到该摄像机的视锥体中。UI的位置和大小会受摄像机的位置、旋转和视野影响,并且可能会被场景中的物体遮挡。
位置和缩放
- Screen Space - Overlay:UI元素的位置是基于屏幕坐标系,原点位于屏幕左下角。UI元素的大小和位置在不同分辨率的屏幕上会自适应,不过可能会出现拉伸或变形的情况。
- Screen Space - Camera:UI元素的位置和大小由摄像机的属性以及画布的距离决定。你可以通过调整摄像机的参数和画布与摄像机的距离,来控制UI的显示效果。在不同分辨率的屏幕上,需要进行额外的设置以保证UI的显示效果一致。
深度和遮挡
- Screen Space - Overlay:由于UI总是渲染在屏幕最上层,所以不会被场景中的物体遮挡。
- Screen Space - Camera:UI元素会参与场景的深度测试,因此可能会被场景中的物体遮挡,也可以遮挡场景中的物体。
性能
- Screen Space - Overlay:因为不依赖摄像机,渲染过程相对简单,性能开销通常较低。
- Screen Space - Camera:由于需要和场景中的物体进行深度测试和渲染排序,性能开销相对较高。
以下是简单的代码示例,展示如何在脚本中设置画布的渲染模式:
using UnityEngine;
using UnityEngine.UI;
public class CanvasModeExample : MonoBehaviour
{
public Canvas canvas;
void Start()
{
// 设置为 Screen Space - Overlay 模式
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
// 设置为 Screen Space - Camera 模式
// canvas.renderMode = RenderMode.ScreenSpaceCamera;
// canvas.worldCamera = Camera.main;
}
}
在这个示例里,你可以通过修改 renderMode
属性来改变画布的渲染模式。如果选择 Screen Space - Camera
模式,还需要指定一个摄像机。