木匣子

Web/Game/Programming/Life etc.

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)