Canvas 与 Camera 层次关系探究
简单测试了一下 Unity3d 里多个 Canvas 在不同的渲染模式中的绘制的层次关系,记录于此。
¶Screen Space - Overlay
-
Canvas 尺寸随屏幕大小变化;
-
所有相机处理完成后,再绘制在屏幕上;
-
即使场景里没有相机也可以绘制;
-
当多个 Canvas 的 Render Mode 都为 Screen Space - Overlay 时,按照 Sort Order 参数从小到大的顺序绘制;
¶Screen Space - Camera
-
Canvas 尺寸随 Camera 变化;
-
将 Canvas 绘制到指定的 Camera;
-
指定 Camera 后,该 Canvas 不会再出现在其它 Camera 中;
-
若多个 Canvas 指定到同一个相机,则按照 Sorting Layer 的顺序绘制;若 Sorting Layer 相同,则按照 Order in Layer 从小到大的顺序绘制;若 Order in Layer 也相同,则按照 Plane Distance 由远到近的顺序绘制;
-
部分等价于 Sprite ,只是位置和大小由 Camera 控制;
¶World Space
-
Canvas 尺寸固定不变;
-
当 Canvas 出现在 Camera 的视野中,就被绘制;
-
可以被绘制到多个 Camera 中;
-
若多个 Canvas 重叠,则按照 Sorting Layer 的顺序绘制;若 Sorting Layer 相同,则按照 Order in Layer 从小到大的顺序绘制;若 Order in Layer 也相同,则按照距离 Camera 由远到近的顺序绘制;
-
等价于 Sprite;
¶其它事项
-
不同的 Camera 会按照 Depth 参数从小到大绘制(后绘制的 Camera 需要将 Clear Flags 设置为 Don’t Clear,不然会把之前绘制的东西都清空);
-
当 Render Mode 为 World Space 的 Canvas 与 Render Mode 为 Screen Space - Camera 的 Canvas 出现在同一个 Camera 中时,Sorting Layer 和 Order in Layer 按原有作用生效,与相机的距离等效于 Plane Distance;(类 Sprite)