
实例化一个控件就必须用NGUI本身内置的方法使用,thisbutton),float back_y) { GameObject go = NGUITools,0); tAddChild(gameObjectlocalPosition = new Vector3(back_x,back_y; Transform t = gotransform! public void back(float back_x
在现在每一个软件应用中,用户界面(UI)都是核心的特征。游戏也没有抛弃这一规则。有非常多的游戏都使用UI来显示一些信息,比如生命值,技能,地图,武器的d药,等等。Unity3D提供了许多UI组件,你都可以在你的游戏中使用它们。在这篇文章中,我会指导你在unity的菜单中如何创建一个简单的暂停菜单。这个暂停菜单将显示一个内容为『Paused』的text组件和三个按钮组件:分别是复位按钮『Resume』,重新开始按钮『Restart』,退出按钮『Quit』,并且还是显示游戏从场景加载到现在的时间。在这篇文章的最后,你应该创建出了类似下面的界面:
在unity如何创建一个简单的暂停菜单
让我们开始吧,打开unity并且创建一个空的工程,选择2D或者3D都可以。一旦项目创建了之后,保存你当前的场景并且给它命名一个你想要的名字。我命名我的场景为『Test』。现在让我们来做用户界面『UI』吧。
在层级视图『Hierarchy』右键然后选择UI->Canvas。
在unity中对于所有的UI组件都需要Canvas。本质上,canvas是你放置UI组件的容器。任意你创建的UI组件都必须是canvas的子对象。当你创建Canvas的时候,你会注意到在层级视图中也创建了一个名为『EventSystem』的对象。这个对象用来确定诸如鼠标输入的事件,这对UI组件来说也至关重要,比如按钮。
恰当地设置你的Canvas的小提示:
在层级视图中选择Canvas。
在检视视图中,找到『RenderMode』然后选择『ScreenSpace_Camera』。
从层级视图中拖拽主摄像机到检视视图中Canvas的『RenderMode』上。
关于Canvas的渲染模式『rendermodes』更详细的介绍请看这里。在本文中,我们将仅仅使用『ScreenSpace_Camera』来做一些简单的事情。这就确保我们的UI会一直显示在摄像机视图上。
现在我们想要在canvas上添加一个面板『Panel』。面板是UI组件中的一个基本组件。我之所以喜欢面板是因为你可以很容易地通过脚本打开或关闭而不影响一整个Canvas。这就允许你创建更多基于游戏状态动态改变的UI组件了。例如,你有一个多玩家的游戏,可以让一个玩家加入另一个玩家的工会,你想要一个菜单显示其他成员在工会里的名字以及他们的血量『HP』到用户界面上。但是,你还是想把所有普通的UI组件(地图,技能,血量,法力)显示在玩家的屏幕上。你可以使用一个面板组件,然后把玩家的名字和血量放到他们自己的菜单上,并且你可以基于玩家是否在工会中来切换菜单打开或是关闭。希望可以帮助到你,想要找unity插件可以到纳金论坛去找。
unityUI笔记
前言:
这只是一个自己在处理unityUI batches的时候的笔记,仅仅有参考价值,如果有异议或者错误的地方可以指出。所有的测试都是用unity自带的spriteatlas进行图集测试,并且使用的是同一个canvas。
UI节点的Z轴影响
Unity在进行和批处理时,如果有一个列表是ABCDE,其中的C的z轴不为0,那么就会打断后面的DE的合批,打断规则我这边也测试了,一般来讲分两种情况。
1在C后面的节点全是和C同一图集上时,Cz轴不为零是不会阻止后面的元素和之前的元素进行合批。
2在C后面的节点存在至少一个不是C图集时,如果C的图集和前面的AB的其中一个是同一图集那么C会和其合在一起C后面的节点会重新计算。如果C和前面的AB不属于同一图集,那么C会单独计算然后C后面的元素再次进行合批。
所以我们一般在开发的时候需检查UI的Z轴值,甚至会写一个工具脚本进行预制件的Z轴值的检查和强制更改。
UI父节点存在mask组件的影响
我们在做UI的时候不免会有用到mask的组件,比如一些特殊的切图表现,还有就是我们常常用到的scrollview。这边我们常常用到的有两种mask:
[if !supportLists]1 [endif]Image组件+ mask组件,也是unity自带的scrollview所用的用法。这种的做法的优点呢,我只想到一个就是可以自定义遮罩的范围。缺点呢也很明显就是会阻断mask内和外的合批。因为这种做法是不可避免的,而且会多增加两层的drawcall,所以能尽量少用就少用。
[if !supportLists]2 [endif]使用rectmask2D,同样缺点是会阻断mask内和外的合批,还有就是固定的长方形的遮罩虽然有偏移值,但仅限四边模糊。优点呢就是比上一个组合少了两个drawcall。
UI与之间重合影响
在两个分别为两张图集的时候,会出现重合或者不重合的情况。如果所有都不重合,那么出去Z轴和mask和canvas的影响基本可以确是可以同一图集的合批的。如果是出现重合,那么就会出现阻断合批的情况。拿AB两张图集进行举例:
[if !supportLists]1 [endif]如果是A1+B+A2这个样式的B盖在A1上,A2盖在B上那么就会有3个drawcall,如果A2没有盖住B,那么也不会阻断只有两个Drawcall。
[if !supportLists]2 [endif]如果是A1+B1+B2+A2的样式,如果不同图集的都有重合那么就是4个drawcall,
如果同一图集的两个只和另外一图集的其中一张有重合,那么就只有3个drawcal,同样四张不同图集的完全没有重合则只有2个drawcall。
[if !supportLists]3 [endif]有的切的时候因为有阴影的存在或者是模糊效果,的边缘存在透明度很高的部分,这部分虽然肉眼观看是透明的,但是也算是两张有重合。
UI中text的影响
Text字体大家都知道其实也是一个大大的图集,其规则和image的重合原理基本相似,唯一不同的是其组件的范围的空白区域重合是不会影响,能影响到的只有字体附近的一些区域。需要注意的是一般都是用自己制作的字体包,这样可控。字体包的数量尽量控制在一个,这样也少了图集很多重合的麻烦。
UI图集整理
[if !supportLists]1 [endif]尽量按照每个界面一张图集的方式,进行图集整理。
[if !supportLists]2 [endif]公用部分的,如果是的大小没有那么的大,则可以放在界面图集这边。如果放在界面图集会使原图集变大,则不放。
[if !supportLists]3 [endif]背景图尽量只有一张的这种结构,辅助背景图,装饰,能不要则不要,能合在同一张背景图最好。
[if !supportLists]4 [endif]不规则图形的会占用大量的空白区域,所以慎用。
[if !supportLists]5 [endif]纯色填充图用22纯白图代替,透明度为0的统一用22透明图代替。
[if !supportLists]6 [endif]进度条或者一些背景,按钮可以做成九宫格的尽量做成九宫格。
[if !supportLists]7 [endif]模糊,高光,渐变,这些很难做成九宫格的,可以尽量的控制好体积。
[if !supportLists]8 [endif]如果图集纵向或者横向因为某一个过长或者过宽,可以考虑对这张分成两份或者三份的方式切,最后拼凑,能在原有的的宽度和长度下放得下,则至少减少了一半的体积。
[if !supportLists]9 [endif]的空白区域过大,可以考虑切成两部分或者多部分进行拼凑。
[if !supportLists]10 [endif]字如果不是艺术字尽量使用我们的字体包,这样多语言也会少一部分资源。
综上
在做UI的时候一些背景图能做成一张,尽量做成一张。能再同一层级放所有的,文字,则最好再统一层级。交叉重合地方能不用则不用,尽量保证UI界面干净清晰。Mask相关的结构能尽量少用就少用。图集能放得下的放在一张,放不下的分好类,每个界面的多数元素尽量在同一图集上。
以上就是关于unity怎样迅速找到某一个ui控件全部的内容,包括:unity怎样迅速找到某一个ui控件、在Unity中怎样创建UI、unityUI优化笔记等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)