Canvas

362 阅读3分钟

Canvas

Canvas是所有UI元素的容器 . 它是作为一个游戏对象出现的,被初始附加了Canvas组件,并且所有的UI元素都必须以其为父对象 ; 如果当前游戏场景中没有Canvas,那么当你创建一个UI元素的时候,例如一个Image元素,会自动为其创建一个Canvas父对象 , 而UI元素作为其子对象 ; 一个Canvas在游戏场景中被显示为一块矩形 , 这使得定位UI元素变得十分简单 ,因为并不需要实时的在游戏视图中查看它 ; Canvas使用EventSystem对象去为Messaging System提供协助 ;

Draw order of elements

UI elements在Canvas中的绘制顺序遵循其在Hierarchy中的排列顺序 ; 例如 ,首先是Canvas的第一个子对象(UI元素)被绘制,其后是第2个... ; 如果2个UI元素重叠 ,那么后面的一个便会覆盖前面的一个 ; 如果有需要使一个元素显示在其它元素的上面 ,仅需要简单的拖动改变其在Hierarchy中的顺序.与此同时, 元素显示顺序也可以通过在脚本中使用Transform组件的这些方法来决定 : SetAsFirstSibling, SetAsLastSibling, and SetSiblingIndex.

Render Mode

Canvas的Render Mode(渲染模式)选项可以用来决定Canvas是如何渲染的,是在Scren Space(屏幕空间) 还是 World Space(世界空间) ;

Screen Space - Overlay

这个渲染模式使得所有的UI元素被特别渲染在游戏场景的最上方,效果是所有的UI元素在屏幕上显示在最上面;如果Screen的尺寸改变或者Resolution改变,那么Canvas会自动的改变尺寸以便适应Screen的改变 .这种显示效果只能是水平的 ;

GUI_Canvas_Screenspace_Overlay.png

Screen Space - Camera

这个渲染模式和Screen Space - Overlay是类似的,不过在该渲染模式下,场景中的Canvas被放置在一个给定的相机前面,并且可以指定相应的距离 ;UI元素正是被这个相机所渲染,这也意味着相机的参数设定将会影响UI的显示效果;如果相机被设置为Perspective(视角) ,那么所有的元素都会被相机渲染为一个指定的Perspective ,而且视角扭曲度(the amount of perspective distortion)能被相机的Field of View所控制 ;如果屏幕的尺寸或分辨率发生了变化,或者相机平截头体(Camera frustum)发生了变化,Canvas同样会自动改变尺寸以便适应屏幕的变化 ;

image.png

World Space

在这个渲染模式下,Canvas会表现为一个场景中的普通对象 , 就像场景中的其他对象一样 ;Canvas的大小也可以在它的Rect Transform组件中手动设置 , 所有的UI元素也会被渲染在其它游戏对象的前面或后面,这取决于其的3D位置 ; 这个模式对那些有意使UIs成为世界空间一部分的需求来说十分有用 ;

image.png