最近,使用Unity在三维场景中显示文本时,发现文本随视角运动而运动,始终显示在视野中央。经过一番实验,终于将文本显示在世界空间内的固定位置。原来文本的显示位置是否随视角移动是由Unity Canvas的渲染模式决定的,并且所有的UI组件都可以通过Canvas来设置渲染模式。
1、 什么是Canvas
Canvas(画布)是承载所有UI元素的区域。所有的UI元素都必须是Canvas的子对象。如果场景中没有画布,那么我们创建任何一个UI元素,都会自动创建画布,并且将新元素置于其下。
2、Canvas的三种渲染模式
Canvas共有三种渲染模式,分别是ScreenSpace-Overlay、ScreenSpace-Camera和WorldSpace。Canvas的渲染模式在Canvas的Inspector窗口下设置,如下图所示:
2.1 Screen Space-Overlay模式
Screen Space-Overlay(屏幕空间-覆盖模式)UI元素的位置坐标是屏幕空间的坐标,Overlay模式下画布会填满整个屏幕空间,并将画布下面的所有的UI元素置于屏幕的最上层。如果屏幕尺寸被改变,画布将自动改变尺寸来匹配屏幕。
此时,画布上的UI组件会随视角移动。
Screen Space-Overlay模式的画布有Pixel Perfect和Sort Layer两个参数:
(1)Pixel Perfect:只有RenderMode为Screen类型时才有的选项。使UI元素像素对应,效果就是边缘清晰不模糊。
(2)Sort Layer: Sort Layer是UGUI专用的设置,用来指示画布的深度。
2.2 Screen Space-Camera模式
Screen Space-Camera(屏幕空间-摄影机模式)UI元素的位置坐标是屏幕空间的坐标,画布也是填满整个屏幕空间,如果屏幕尺寸改变,画布也会自动改变尺寸来匹配屏幕。所不同的是,在该模式下,画布会被放置到摄影机前方。在这种渲染模式下,画布看起来绘制在一个与摄影机固定距离的平面上。所有的UI元素都由该摄影机渲染,因此摄影机的设置会影响到UI画面。
在此模式下,UI元素是由perspective也就是视角设定的,视角广度由Filed of View设置。
此时,画布上的UI组件会随视角移动。
它比Screen Space-Overlay模式的画布多了下面几个参数:
(1)Render Camera:渲染摄像机
(2)Plane Distance:画布距离摄像机的距离
(3)Sorting Layer: Sorting Layer是UGUI专用的设置,用来指示画布的深度。可以通过点击该栏的选项,在下拉菜单中点击“Add Sorting Layer”按钮进入标签和层的设置界面,或者点击导航菜单->edit->Project Settings->Tags and Layers进入该页面。
可以点击“+”添加Layer,或者点击“-”删除Layer。画布所使用的Sorting Layer越排在下面,显示的优先级也就越高。
(4)Order in Layer:在相同的Sort Layer下的画布显示先后顺序。数字越高,显示的优先级也就越高。
2.3 World Space模式
World Space即世界空间模式,此模式下UI元素的位置坐标是世界空间的坐标。画布作为场景中的一部分被固定显示在场景中,显示效果类似Plane组件。