欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity学习笔记(07):UGUI的Canvas、Image组件

程序员文章站 2022-05-30 12:06:15
...

Unity的GUI包

在Unity中完成2D界面 有两种方式
有自带的GUI 还有开源的第三方包NGUI 其中 NGUI被Unity广泛使用

在Unity5.x之后 Unity和NGUI联合开发了UGUI
因此 Unity已经内置了UGUI

????在3D世界显示2D元素

在Unity中 3D的单位是m(米) 而2D的单位是px(像素)
有两种方式可以实现在3D世界显示2D元素:

创建一个2D精灵元素Sprite
在Hierarchy右键 -> 2D -> Sprite
将图片的类型改为2D:
记得点击Apply应用
Unity学习笔记(07):UGUI的Canvas、Image组件
Pixels Per Unit定义了多少像素为1世界单位
100 即意为 100像素为世界的1m(米)
Unity学习笔记(07):UGUI的Canvas、Image组件
再将图片拖到Sprite节点的Renderer/Sprite即可:
Unity学习笔记(07):UGUI的Canvas、Image组件

计算Sprite和Camera相距多少才能完全充满屏幕

Unity学习笔记(07):UGUI的Canvas、Image组件
公式:

z=h/(2*tanθ)

z=距离
h=屏幕高度
θ=屏幕张开角

由于屏幕张开角为60°
Unity学习笔记(07):UGUI的Canvas、Image组件
屏幕高度为1600px=16m
Unity学习笔记(07):UGUI的Canvas、Image组件
因此 z=h/(2tan30°)=16/(2tan30°)≈13.4

Unity学习笔记(07):UGUI的Canvas、Image组件
Unity学习笔记(07):UGUI的Canvas、Image组件

还有另一个方式:

若在更远或更近的距离 则精灵图进行缩放
比如 在18m的距离 在13.4能够全屏 则缩放值为18/13.4≈1.34
Unity学习笔记(07):UGUI的Canvas、Image组件
这样计算 比较复杂 而UGUI正能解决该问题

十一、Canvas

UGUI提供了Canvas节点 该节点负责2D元素的比例缩放
以Canvas为根节点的UI树 所有UI元素都挂在这棵树上 对Canvas进行比例缩放以实现正确显示2D元素

UGUI下面除了Canvas 还有控件时间响应 如此 组成了UGUI体系

Unity将所有UGUI元素放入UI标签下了 因此 若要创建 只需要在Hierarchy右键 -> UI -> Canvas即可创建Canvas
与此同时还会自动创建一个EventSystem 该节点用于接收UI事件
Unity学习笔记(07):UGUI的Canvas、Image组件
当然 创建UI下的任何物体 都会自动带上Canvas父节点

????Canvas的组件

Canvas下带有四个组件:
Unity学习笔记(07):UGUI的Canvas、Image组件

Rect Transform

每个节点都需要带有transform组件 而Rect Transform继承自transform
Canvas的transform一旦被创建 则无法进行任何修改

Canvas

Canvas绘制2D元素的设置
Render ModeScreen Space - Overlay覆盖到屏幕上
在画完所有物体后将该层覆盖到屏幕的最上方
Camera即使隐藏了 或者无法拍摄 2D元素照样能够显示
Unity学习笔记(07):UGUI的Canvas、Image组件
Pixel Perfect 显示像素
勾选上后 显示像素会更加好
Unity学习笔记(07):UGUI的Canvas、Image组件
Target Display控制绘制到哪个屏幕上
Unity学习笔记(07):UGUI的Canvas、Image组件
Canvas Scaler 控制2D元素的缩放策略
Unity学习笔记(07):UGUI的Canvas、Image组件
Constant Pixel Size根据像素控制
Constant Physical Size根据物理尺寸控制
Unity学习笔记(07):UGUI的Canvas、Image组件
Scale With Screen Size根据屏幕尺寸控制
缩放公式:
Match是缩放因子 控制根据什么缩放
Unity学习笔记(07):UGUI的Canvas、Image组件

Graphic Raycaster与事件碰撞相关
Unity学习笔记(07):UGUI的Canvas、Image组件
在Canvas下创建一个Image节点 即可将图片显示其上了
Unity学习笔记(07):UGUI的Canvas、Image组件
Unity学习笔记(07):UGUI的Canvas、Image组件
Render ModeScreen Space - Camera由摄像机拍摄
此时由于没有选择Camera 因此无效
Unity学习笔记(07):UGUI的Canvas、Image组件
因此需要选择一个用于渲染的摄像机:
Unity学习笔记(07):UGUI的Canvas、Image组件
此时Camera隐藏 则2D场景也无法显示了
Unity学习笔记(07):UGUI的Canvas、Image组件
Plane Distance决定了2D和3D物体的遮挡关系
若该值大于3D元素和摄像机的距离 则3D元素会显示在2D元素的前方
反之 若该值小于3D元素和摄像机的距离 则3D元素会显示在2D元素的后方
Unity学习笔记(07):UGUI的Canvas、Image组件
Render ModeWorld Space使用世界空间
此时距离会自动换算
Unity学习笔记(07):UGUI的Canvas、Image组件
World Space是自己控制缩放的比例 自己计算
可以将2D元素和3D元素融合在一起

????Image组件

用于显示非交互式的组件

可以添加材质:
Unity学习笔记(07):UGUI的Canvas、Image组件
此时图片无需精灵图了:
Unity学习笔记(07):UGUI的Canvas、Image组件
创建一个材质球 Create -> Material
拖入即可使用:
Unity学习笔记(07):UGUI的Canvas、Image组件