UnityGUI系统之Canvas

一、Canvas与EventSystem

Canvas是一个画布,就像我们绘图用的图纸一样,所有的控件都必须在Canvas中才能被绘制出来,在其他地方则不能被绘制出来。

二、Canvas的基本属性

UnityGUI系统之Canvas

首先我们需要知道画布上的图形绘制顺序:

1、当处于同一层次的组件时则是先创建的组件,先绘制后创建的组件则后绘制,在层次结构上先创建的组件则处于下层,而后创建的组件则位于上层,在层级视图中,组件的排列顺序也是根据先后顺序从上往下排序。我们通过改变空间在层级视图中的排列顺序来改变空间的先后顺序。也可以通过代码来改变。

列如: 
UnityGUI系统之Canvas

2、当控件处于父子关系是则先绘制出子物体空间再绘制父物体空间:

列如 : 
UnityGUI系统之Canvas

同样我们可以改变图形的父子关系来改变绘制顺序

Canvas Scaler组件 :

Canvas Scaler组件用于设置处于不同组件下Canvas画布中的元素的缩放模式。

Ui Scaler Mode : 设置UI的缩放模式:

UnityGUI系统之Canvas

Constant Pixel Size : 无论处于什么分辨率下Canvas下的UI控件都保持原来的大小。

Scale With Screen Size :在当前模式下,Canvas画布下的UI控件会随着不同的分辨率而进行一定的缩放,以达到合理的大小。 
在这种模式下有一个选项: 
UnityGUI系统之Canvas

Reference Resolution :设置当前窗口的分辨率,通常设置自己需要运行游戏的分辨率。

Match : 设置缩放的方向比例,当值为零的时候则只在宽度改变是进行缩放,当为1时则只在改变高度的时候进行缩放。

Canvas组件的渲染模式:

Render Mode 属性设置的画布的渲染模式 ,其中有三种渲染模式:

UnityGUI系统之Canvas

Screen Space - Overlay模式:

这种模式下是直接在屏幕上渲染显示画布的内容,即使画布不在摄像机范围类,或者当前没有摄像机是画布上的内容都会绘制出来。在这种模式下内部是集成了一个摄像机的,但我们无法操控这个摄像机。

在这种模式下,在不同的屏幕分辨率下画布会自动适配屏幕的分辨率大小。

列如当禁用摄像机是图像依然显示在屏幕上: 
UnityGUI系统之Canvas

Screen Space -Camera 模式:

在这种模式下,是将画布放置在距离摄像机一定距离的视野中,画布的内容都是通过摄像机来绘制,此时的画布会跟随着摄像机的移动而移动。当摄像机被禁用时画布也不会显示出来。

这种模式下当摄像机视野大小改变或者屏幕大小改变,画布也会自动去适配。

UnityGUI系统之Canvas

UnityGUI系统之Canvas

RenderCamera:设置选用的摄像机

Plane Distance :设置摄像机距离画布的距离

在这种模式下我们可以在画布与摄像机之间添加3D模型,或者3D特效。

World Space 模式 : 
这种模式下画布会被当做世界空间中的一个模型来处理,它不会跟随摄像机的移动,超出摄像机视野则不会再被显示出来,这种模式下可以手动的设置画布的位置,以及画布大小,画布不会再自动适配。

UnityGUI系统之Canvas

Graphic Raycaster组件: 
射线检测组件,其作用是用于获取用户选中的uGUI控件,当禁用这个组件的时候用户在无法获取到控件对控件进行操作,其属性为: 
UnityGUI系统之Canvas

Ignore Reversed Graphics :是否忽略控件的正面和反面方向,都接受射线的检测,勾选则是。

Blocking Objects:屏蔽指定类型的(物理)对象,使它们不参与射线检测。渲染模式不为ScreenSpaceOverlay时起作用。 
可选值为: 
None:不屏蔽任何物理对象 
Two D:屏蔽2D物理对象(即具有2D碰撞体的对象) 
Three D:屏蔽3D物理对象(即具有3D碰撞体的对象) 
All:屏蔽所有物体对象

Blocking Mask:使屏蔽对象中的指定层不参与射线检测。渲染模式不为ScreenSpaceOverlay时,且Blocking Objects不为None时起作用。