Ugui中怎么让3D的3D里物体怎么上下移动显示在Canvas内的UI之前

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

前段时间在一个项目里面遇到需要依照一定顺序和规则排布某些UI。
之前参考过雨松MOMO夶神的相关内容原文链接如下:

UI需要依据摄像机不同的位置调整各自相对显示的层次和距离大小(相对于摄像机近大远小)。

一开始尝試使用NGUIUI的层次问题得到完美解决。
后面再处理NGUI相对于摄像机的位置信息的时候因为要得到 UI所处的对应的世界坐标,因而在获取相关坐標值的时候发现NGUI的屏幕坐标转世界坐标并不能得到期望的结果遂放弃该方案。

回到UGUI在查阅官方文档的时候发现有一个参数可以直接设置。

发布了14 篇原创文章 · 获赞 11 · 访问量 3万+

}

我们 游戏完全使用UGUI来工作所以遊戏中的很多元素都是UGUI的 Game Canvas画布设置为;World Space , 主要也是为了以后一下牛叉的效果

第一种是 为角色创建子对象了类型是Canvas画布,Unity的官方事例是这么做嘚可以自己去看看。这样在Hierarchy上是有上下级的层级关系的

第二种呢,其实也很简单就是我得到角色的位置position, 然后转换为屏幕坐标系,然後在转换为UGUI所在画布和相机的坐标系即可得到了这个就赋值给UI即可了。但是这样在Hierarchy上是没有上下级的层级关系的一个属于Game Canvas画布,一个茬Spines Layer中但是角色会有UI的引用。

}

一句话概括Canvas就是渲染 UI 的组件UGUI是Unity噺支持的2D界面控件,所有的UI控件都需要在包含Canvas组件的3D里物体怎么上下移动下边充当子3D里物体怎么上下移动我们可以在GameObject->UI下创建3D里物体怎么仩下移动时,会自动生成Canvas以及与其对应的EventSystem控件

Canvas可以只有一个,也可以多个Canvas或者将一个Canvas作为另一个Canvas的自3D里物体怎么上下移动。

在此模式丅Canvas将作为2D图像直接渲染在屏幕上,且处于屏幕的最前方不会受其他任何3D里物体怎么上下移动遮挡, 同时不受任何设置的影响即使没囿相机也可以看到其内容。

在此模式下Canvas可以指定渲染的相机,并根据相机距离Canvas的远近以及相机的视锥体大小进行动态缩放最终实现在屏幕上的平铺效果。当有3D里物体怎么上下移动比Canvas更接近相机时该3D里物体怎么上下移动会显示在Canvas的前方。3D里物体怎么上下移动距离相机比Canvas遠的3D里物体怎么上下移动将会被遮挡

在此模式下,Canvas会像3D3D里物体怎么上下移动一样位于游戏场景中可以设置其位置和大小,与其他3D3D里物體怎么上下移动具有同样的显示效果

详细信息可参看官方文档

这个控件主要负责Canvas的显示效果

当选择Constant Pixel Size时,即完全根据Canvas设置的大小进行显示无论在何种分辨率下,大小均为Unity中设置的大小(不能很好地适应不同分辨率)

当选择Scale With Screen Size时,可以根据屏幕的大小进行缩放在此模式下囿三种不同的缩放方式,如下所示:

Reference Resolution属性主要为参考分辨率大小在此分辨率下进行设计,随后根据不同的缩放方式适应不同的分辨率

Expand:Canvas不会小于设置的分辨率大小

Shrink:Canvas不会大于设置的分辨率大小

在分辨率自适应模式下,可能会带来3D里物体怎么上下移动缩放问题如果缩放鈈正常,可在代码中手动更改localScale为(1,1,1)进行部分修正

当选择Constant Physical Size模式时,则根据设定好的物理大小进行展示根据不同分辨率适应性不是很好。

每個Canvas都需要添加此组件用于获取对UGUI的控制和操作。

Canvas中UI元素的绘制顺序和它们在层级视图中出现的顺序相同。Canvas下第一个子对象会最先被绘淛接着是第二个子对象,以此类推如果两个UI元素重叠了,那么后绘制的元素会覆盖掉先绘制的元素

要想改变某个UI元素的绘制顺序,呮需要通过拖动重新在层级视图中排列元素就可以了绘制顺序也能够通过脚本来控制,需要用到Transform组件的三个方法:SetAsFirstSibling、SetAsLastSibling和SetSiblingIndex

另外说一下,Canvas Renderer吔是UI组件必须携带的组件

我们来看一下其为我们提供的功能:

位置是以像素为单位,其具体的值则以锚点为准表示和锚点距离,其中x軸从左到右的数值越来越大y轴从下到上的数值越来越大,其中的Pos Z和Transform中的position.z效果一致但不是使用该值来表示UI的深度。保留该值估计是为了茬3D UI的一些效果实现上的考虑

不同于缩放,这两个值设置了UI的尺寸为负并不会翻转UI而是直接不显示。

上面的两个按钮上方的按钮是设置width为320,下方则是将width为160的按钮的scale x设置为2

不通过NGUI的深度,在UGUI中的深度完全使用树形结构来表示同一层级里位于下方的节点会覆盖掉位于上方的节点,如下:

修改一下树形显示列表后如下:

Rect Transform除了上面提到的功能外还提供了描点功能,该功能主要实现相对布局的功能

同时我們还可以非常直观的配置描点:

锚点描述的是当前UI的父对象的位置信息。而锚点则表示当前对象坐标的(0,0)点

我们可以发现有Left、Center、Right、Top、Middle忣Bottom六个设置项,这6个项目可以组合出9种形式的锚点分别对应了当前UI父对象的9个方向的位置,这样方便我们的UI做相对位置的调整比如当UI嘚坐标为(0,0),选择CenterMiddle则当前UI为居中状态而选择TopLeft则UI会位于父对象的左上角。

除了上面说到的还有一种stretch状态该状态则表示当前UI距离父级UI边緣的距离,当设定了之后则是使用一种类似相对位置的方式来定义UI的位置及尺寸我们看下:

我们发现按钮始终和父级保持10个像素的距离,调整父级的尺寸会修改子级的尺寸如下:

我们发现按钮始终为一种相对的位置呈现。

我们之前定义锚点都是直接在下拉菜单中选择那么锚点是否可以自定义,答案是肯定的比如当我们需要下面的效果时就需要自定义Anchor了。

我们希望子UI的尺寸始终和父UI的尺寸保持一定的仳例比如无论父UI多大,子UI都占其10%的空间

我们只需要将子UI的锚点设置为一个合适的值即可,比如设置为子UI的尺寸如下:

我们复制几个妀变大小看看效果:

注册点或者叫做中心点,如果说Anchor表示的是UI的父级的位置那么Pivot则表示UI本身的(0,0)点的位置。

我们首先开启Pivot:

然后就可鉯在场景中修改UI的Pivot了如下:

这个小蓝圈就是Button组件的中心点,表示Button组件的(0,0)点

我希望在屏幕的右上方显示一个按钮且按钮和屏幕的间距为10,只需要将按钮的中心点也设置到右上方即可如下:

表示是否忽略掉3D里物体怎么上下移动的旋转。点开不能对3D里物体怎么上下移动进行旋转

表示当修改Anchor时UI的位置及尺寸是否会根据Anchor进行匹配,点开可以进行匹配

在这一节中,我们将会尝试如何摆放UI元素让它们能和Canvas以及咜们之间形成关联。如果在阅读的过程中你想自我尝试,可以通过在菜单GameObject>UI>Image来创建一个Image来进行测试

每个UI元素都在视图中显示为一个矩形。可以通过使用toolbar里的矩形工具在Scene视图改变这个代表UI元素的矩形。这个矩形工具同时适用于Unity2D特征和UI元素事实上它也能适用于3D3D里物体怎么仩下移动。

Rect工具可以同时用来移动UI改变UI大小也可以旋转UI。一旦你选择了一个UI元素你可以点击在UI矩形区域内的任意位置拖动它到别的地方。可以把鼠标放在UI矩形的边框或者四角通过拖动改变UI的大小如果要是想旋转UI元素,要把鼠标慢慢移动到一个角外面直到鼠标显示为┅个旋转图标,然后你通过点击加拖动的方式来旋转UI

就像其他工具一样,通过工具栏设置Rect工具也可以使用当前中心点(pivot)模式和空间模式。在操作UI的时候将工具栏设置为Pivot和Local是一个很好的选择

Rect Transform组件有位置,角度大小这些属性就像普通Transform组件一样,但是它还有宽度高度这些屬性,用于指定UI矩形的尺寸

对于2D精灵系统和3D3D里物体怎么上下移动,当使用Scale改变3D里物体怎么上下移动尺寸的时候会改变3D里物体怎么上下迻动本地的尺寸,然而用Rect组件去改变大小的时候,将会改变3D里物体怎么上下移动的宽度和长度然后本身的尺寸不会发生改变。这样不會改变字体的大小被修剪过的图片的边框,等等之类的

world的全部文字,并且文字大小没有改变中间的是通过Scale,把Scale中的x改为2,可以观察看到芓母"d"还是看不到,但是字体的大小被改变

Pivot(枢轴;中心点,中枢)

旋转size和scale的改变都是围绕Pivot来进行的,所以pivot的位置改变也会影响到旋转size和scale妀变的效果,当在工具栏中选择pivot模式可以通过Rect工具在Scene是视图中改变Pivot的位置。

Rect组件还包括一个布局概念叫做锚点。锚点在Scene场景中通过四個小的三角形状的工具表示出来关于锚点的信息也可以在Inspector中看到。

如果Rect组件的父类游戏3D里物体怎么上下移动也有Rect组件那么子类3D里物体怎么上下移动的Rect组件可以通过锚点以不同的方式固定在父类3D里物体怎么上下移动的Rect组件中,例如子类固定在父类中间或者一个角。

UI元素嘚锚点固定在父类的中心当父类改变的时候,它始终和父类保持一定距离

UI元素的锚点固定在父类的改变的时候它始终和右下角保持一萣的偏离

设置锚点可以使子类3D里物体怎么上下移动随着父类3D里物体怎么上下移动同时改变宽度和高度,矩形的四个角和它相对应的锚点都囿着一个固定的偏移比如像矩形的左上角对应左上角的锚点有着一个固定的偏移。通过这种方式矩形的不同角就和父类相对应的不同錨点固定下来了。

UI元素的左边两个角将父类元素的左下角设为锚点子类元素的右边两个角将父类元素的右下角设为锚点。元素的每个角囷它们对应的锚点都会保持一定的偏移

锚点的位置,可以通过在父类中用分数或者百分数设置0.0对应着左边和底边,1,0对应着右边或者上邊左右的时候,0代表最左边1代表最右边,上下的时候0代表下边,1代表上边不过锚点不仅可以在父类3D里物体怎么上下移动的边框或鍺中间设置,也可以将锚点设置在父类矩形框内的任何位置

UI元素的左边两个角和父类3D里物体怎么上下移动的左边框,保持一个固定的比唎右边也同样。

你可以分别设置每一个锚点也可以把鼠标放在锚点中间并且拖动,同时设置所有锚点如果你摁住Shift键,同时拖动一个錨点的时候那么和这个锚点相对应的父类3D里物体怎么上下移动的顶点也会随着移动。锚点有一个非常有用的特征他们会自动地和其他兄弟界别的UI矩形对齐,并且保持一个准确的位置

在Inspector面板上,锚点预设按钮在意在Rect Transform组件的左上方看见点击这个按钮,可以看到锚地预设媔板打开从这里你可以快速选择几种最常用的锚点放置方式。这样你就可以把UI元素固定在父类3D里物体怎么上下移动的边框或者中心它吔会随着父类3D里物体怎么上下移动尺寸的改变而灵活的变化,水平方向的锚点设置和垂直方向的锚点设置是相互独立的

如果选择了一个預制的锚点预设,那么锚点预设按钮会显示出来若果锚点的水平方向或者垂直方向,选择的不是预制的几种锚点设置那么在锚点按钮處会相对应的显示为Custom。

如果你看不到锚点Min,Max数字你也点击锚点扩展按钮将这些显示出来。ancher的最小值(0,0)对应左下角(1,1)对应着右上角。

在Postion框中会依据锚点的是否放置在一起显示出不同数值(会显示出一个修正过的宽度和高度),或者分别显示出来(这会使得UI元素的矩形框随着父类3D里物体怎麼上下移动的矩形框一起改变

当所有的锚点图标在Pos框显示出来时会显示出Pos X, Pos Y, 宽度和长度。Pos X和Y的数值代表pivot和锚点之间的关系

可以在输入框內分别设置锚点,使得完全靠左边或者右边或者上边或者下边这些输入框代表着锚点和边框的距离。Left和Right输入框能够设置左右Top和Bottom能设置仩下。

当你改变anchor和pivot输入框内的数值时position的数值也会随着改变,这是为了让UI矩形边框保持位置如果这导致矩形位置不在想要的位置上,Raw模式(就是Inspector的R图标)可以在Inspector里激活这会让anchor和pivot不会随着其他数值的改变而改变,这样可以使得UI矩形框在可视化地改变因为它的位置和尺寸与anchor和pivot楿互独立。

}

我要回帖

更多关于 3D里物体怎么上下移动 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信