Canvas的六大基础组件(持续更新中)
一、Canvas的六大基础组件Canvas画布组件主要用于渲染UI控件Canvas Scaler画布分辨率自适应组件主要用于分辨率自适应Graphic Raycaster射线事件交互组件主要用于控制射线响应开关RectTransformUI对象位置锚点控制组件主要用于控制位置和对其方式EventSystem对象上依附的EventSystem玩家输入事件响应系统主要用于监听玩家操作Standalone Input Module独立输入模块组件主要用于监听玩家操作二、Canvas组件三种渲染方式Screen Space - Overlay屏幕空间下的覆盖模式UI始终显示在最前面Screen Space - Camera屏幕空间下的摄像机模式3D物体可以显示在UI之前World Space世界空间3D模式1. Screen Space - Overlay屏幕空间下的覆盖模式UI始终显示在最前面Pixel Perfect是否开启无锯齿精确渲染用性能来换效果可根据需要开启SortOrder排序层编号用于控制多个Canvas时的渲染先后顺序数字越小越先渲染数字越大越后渲染后渲染的内容就会显示在屏幕上方TargetDisplay目标设备在哪个显示设备上显示Additional Shader Channels其他着色器通道决定着色器可以读取哪些数据Vertex Color Always In GammaLinear 空间下强制 UI 顶点色用 Gamma 空间渲染解决颜色发灰2. Screen Space - CameraRenderCamera用于渲染UI的摄像机如果不设置将类似于覆盖模式Plane DistanceUI平面在摄像机前方的距离类似整体Z轴的感觉Sorting Layer所在排序层Order in Layer排序层的序号RenderCamera 一般不建议使用主摄像机不方便控制3D物体和UI的渲染顺序一般会有一个专门渲染UI的摄像机UI摄像机只渲染UI层Clear Flags 设置成 Depth only主摄像机渲染除了UI的其他Clear Flags 设置成 Skybox主摄像机的 Depth 要低于 UI摄像机 以此保证UI始终显示在物体上方这时如何让3D物体显示在 UI 前呢比如做人物面板只需要在 UI 所在 Canvas 画布里创建 3D物体即可仔细看UI中心有个点那就是新建的3D物体因为 UI 为了分辨率自适应会去缩放3D物体如果想要3D物体被看到就要把它缩放大小改大一点在Canvas中创建的3D物体它的Layer也是UI3. World Space让 UI 跟随玩家进行旋转和缩放一般用于虚拟现实Event Camera用于处理UI事件的摄像机若不设置不能正常注册UI事件EventCamera一般设置成主摄像机本质是把UI当成3D物体来对待总结Canvas组件的3种渲染方式覆盖模式UI始终显示在最前面摄像机模式3D物体可以显示在UI之前3D模式用于制作3DUI在VR和AR中常用游戏中的3D UI效果才使用三、CanvasScaler组件三种适配模式Constant Pixel Size恒定像素模式无论屏幕大小如何UI始终保持相同像素大小Scale With Screen Size缩放模式根据屏幕尺寸进行缩放随着屏幕尺寸放大缩小Constant Physical Size恒定物理模式无论屏幕大小和分辨率如何UI元素始终保持相同物理大小1. Constant Pixel Size恒定像素模式UI 像素大小固定不随屏幕缩放一般游戏开发中极少使用2. Scale With Screen Size游戏开发中最常用的模式称为缩放模式根据屏幕尺寸进行缩放随着屏幕尺寸变化来放大缩小Reference Resolution参考分辨率美术同学出图的标准分辨率缩放模式下的所有匹配模式都会基于参考分辨率进行自适应计算Screen Match Mode屏幕匹配模式当前屏幕分辨率宽高比不适应参考分辨率时用于分辨率大小自适应的匹配模式三种匹配方式Expand水平或垂直拓展画布区域会根据宽高比的变化来放大缩小画布保证UI的显示可能有黑边Shrink水平或垂直裁剪画布区域会根据宽高比的变化来放大缩小画布会最大程度地放大UI元素让UI元素能填满画面可能会裁剪Match Width Or Height以宽高或者二者的平均值作为参考来缩放画布区域最常用的模式竖屏游戏Match 0将画布宽度设置为参考分辨率的宽度并保持比例不变屏幕越高可能会有黑边横屏游戏Match 1将画布高度设置为参考分辨率的高度并保持比例不变屏幕越长可能会有黑边总结游戏开发中一般使用 Scale With Screen Size 缩放模式若存在横竖屏切换选择Expand 和 Shrink 模式不存在横竖屏切换选择 Match Width or Height横屏游戏 Match 1竖屏游戏 Match 03. Constant Physical Size恒定物理模式无论屏幕大小和分辨率如何UI元素始终保持相同物理大小DPIDots Per Inch每英寸点数图像每英寸长度内的像素点数一般很少用这种模式在此不做叙述4. 隐藏模式World 3D 世界模式Canvas 选中 Word Space 时会开启此模式Dynamic Pixels Per UnitUI中动态创建的位图例如文本中单位像素数类似密度Reference Pixels Per Unit单位参考像素多少像素对应Unity中的一个单位默认一个单位是100像素一般不修改四、Graphic Raycaster 组件Graphic Raycaster 是图形射线投射器用来检测 UI 的输入事件1.Ignore Reversed Graphics勾选后射线会忽略 UI 元素背面法线反向的碰撞检测仅正面可响应点击避免背面误触2.Blocking Objects指定哪些 3D 物体可以阻挡 UI 射线可选None无阻挡、2D2D 物理物体、3D3D 物理物体、All全部用于实现 UI 被 3D 物体遮挡时不响应点击在 Screen Space - Overlay 模式下无效3.Blocking Mask仅对Blocking Objects生效用于过滤可阻挡射线的 Layer 层级只有勾选的层级物体会阻挡 UI 射线精准控制遮挡范围在 Screen Space - Overlay 模式下无效五、EventSystem管理玩家的输入事件并分发给各UI控件它是事件逻辑处理模块所有的UI事件都通过 EventSystem 组件中轮询检测并做相应的执行没有EventSystem所有点击、拖曳等等行为都不会被响应1. First Selected游戏运行时首先选择的游戏对象若拖进去一个Button运行游戏时则会选中此Button并保持选中2. Send Navigation Events是否允许导航事件。勾选后可通过键盘、手柄等控制UI组件的点击3. Drag Threshold拖拽操作的阈值其值决定了拖拽多少像素算拖拽六、Standalone Input Module独立输入模块处理键盘、鼠标、触屏等的输入配合 Graphic Raycaster 完成射线检测并分发事件依赖于EventSystem组件二者缺一不可Send Pointer Hover To Parent勾选后鼠标悬停事件会向上传递给父级 UI实现父级响应子元素的悬停状态。Horizontal Axis绑定水平方向左右的输入轴用于 UI 导航如手柄 / 键盘选菜单。Vertical Axis绑定垂直方向上下的输入轴用于 UI 导航。Submit Button绑定 “确认” 按钮输入对应键盘回车 / 手柄 A 键等确认操作。Cancel Button绑定 “取消” 按钮输入对应键盘 ESC / 手柄 B 键等返回操作。Input Actions Per Second设置 UI 导航按键的连发频率数值越高连续导航越快。Repeat Delay设置长按导航键后触发连续导航的初始延迟时间秒七、RectTransform还没写完持续更新中