位置: 编程技术 - 正文
推荐整理分享Unity3d_NGUI和UGUI的学习,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
由于之前刚入门的时候,应Unity3d整体发展的要求我们自学了UGUI(相对来说UGUI比NGUI做得更好一些,后面会有2者对比),但是后来公司要求使用NGUI,所以我这边把之前学习UGUI(不全,当时资源有限)和NGUI的学习心得什么的整理一下。学习UI,基础差的看一些教程,基础好的可以直接查看官方案例,根据案例上的相关功能自己做,有什么不懂的参数或者小知识网上问一下,向他人请教也是可以的。
一、NGUI
这段时间学习了一下,NGUI,个人觉得还不错,它的延伸资源比较多,毕竟存在的时间更久,功能更完善一些,还有现在大多数公司还是使用NGUI,转型比较麻烦。
NGUI我是看着教程学的,一部比较经典的教程:
(Unity插件之NGUI 完整视频教程)原教程: Prefebs toolbar,这里面的控件可以直接拖出来用,自己做的控件也可以制作成prefeb拖进去用2.之前饱受困扰的在scenes场景里的相机图片,可以在gizmos里面隐藏起来!3.为什么视频里说将UIRoot的脚本展开就可以右键来创建了,但其实并没有什么用一、Label:1.和UGUI一样,字体大小同样受限于label本身的大小,字体大小超出控件大小,会进行自适应2.字体有两个属性:(1)NGUI字体:NGUI有一个字体制作器(NGUI-Open-Font Maker),在这边制作的字体要选择NGUI属性(2)unity字体:选择动态字体,ttf,系统内置的3.和UGUI一样,NGUI里面输入中文可能不太行,得先在记事本里面写完再复制上去4.字体大小与控件大小的自适应是在Overflow里面设置的,和UGUI差不多(1)shrink收缩(类自适应)(2)clamp将所写的string进行裁剪,在控件框外面自动裁剪(3)resize freely:将控件大小和文字大小保持一致(4)resize height:如其所说,高度不固定,宽度固定5.换行的地方在text处,NGUI直接回车,UGUI忘了试了,但是程序在string中加入n换行符还是可以起作用的6.Alignment:对齐方式里面,有justified自动扩展字间距使整个test与控件保持一致(只对英文起作用)7.Gradient:颜色渐变,应该是NGUI独有的,就是字体从上往下渐变,设置top颜色,然后bottomm颜色,自行渐变8.Effect:text带的效果,shadow阴影,outline外部轮廓9.Color Tint:字体颜色.要实现打字机的效果在label上增加一个脚本(NGUI自带的)Fade In Time:就是有种写出来的感觉,慢慢显现出来keep full dimension:就是是其保持完整的尺寸,未勾选上会有一行的字不断往上移动的感觉,勾选完后就只是按设置好的位置一个个出现二、Sprite:精灵显示图片用的Altas就是图集,精灵就是其中的一块图片,Altas图集可以在Open-Altas Maker制作(1)Type:这里面和UGUI里讲的差不多(2)Flip:就是各个方向翻转三、Panel面板和UGUI里面差不多,类于容器,用于分类,统一操作和创建一个空的go差不多,但是NGUI的panel带属性:(1)Alpha,可以调整整体透明度(2)Depth:这个属性UGUI不具有,UGUI只是随生成的顺序来调节深度的,这点很麻烦,做一些操作做不到,有这个属性会变得更简便很多(3)Cliping:指定显示panel的某个部分,类flash里面的遮罩这里面的Texture mask不太了解什么意思,教学视频没有这个选项,个人觉得是类于ps里面蒙版的作用,用texture遮盖原sprite的纹理,但是透明度太低了,完全看不到效果constraint but dont clip:设置大小,但是不要裁剪四、Button按钮1.可以是label,sprite,只要增加一个点击的功能就行2.要实现按钮功能,首先要在attach-collider给控件添加一个collder,用来接收点击信息,然后再添加一个buttonScript脚本,来处理点击消息响应3.和UGUI一样,按钮有四种状态,和UGUI类4.消息响应也是类于UGUI,都是将脚本挂在在一个go上,然后将go拖拽进按钮响应事件里,并且将里面响应的方法改为对应的方法5.如果想将子控件(比如说父控件为精灵控件,子控件为lable控件),想同时改变2者根据点击,停留等的响应变化,可以在父控件上再增加一个UIButton脚本,将target改为子控件。其实在父控件上再加一个UIButton脚本,和在子控件上加一个脚本差不多,但是会有问题就是,当添加UIButton脚本运行的时候会自动添加一个TweenColor脚本,每当一个控件上有一个UIButton脚本的时候都会带一个,所以都放在父控件上的好处就是只会带上一个,而不是父子控件上都会带上(经试验证明是这样,但是事实是怎么又待考证)五、Atlas创建图集:Open-Atlas Maker(图集编辑器)1.选择new2.选择要制作成图集的图片3.create后会新生成3个文件(这种方法类于cocos里面的图片打包器)4.以后使用这个图集就是使用创建出来的新文件中的Prefeb5.如果想删除图集里面的某张图片的话,右键预制体用Atlas Maker打开,然后叉掉完delete掉要删除的图片6.要更新或者增加图片还是想之前创建的时候一样,之间打开图集的Atlas Maker然后点击想要添加的图片,会显示update或者add,然后点击Update/Add按钮就会自行更新六、SlicedSprite切图(九宫切图),这个在UGUI里面也有相应的操作,1.概念:将某些图片拉大,他的边缘会虚化,用切图可以很好的消除边缘虚化。2.做法:(1)将图片文件的Type改为Sliced(2)点击图片的Edit键进行图片编辑①Dimensions是制作图集自动生成无需更改的②然后更改border(为什么我更改后无法还原)切图在按钮上用的比较多,因为按钮一般不希望被修改边框,特别是圆角的按钮,但问题是若是按钮是圆形的呢。3.因为NGUI不像UGUI做slice图片那么直观,所以一开始可以先把图片放大来看,然后在编辑里面调整border的大小,看不到拉伸即可七、dynamicFont动态字体制作和显示:静态字体:比如有个汉字,就把这个汉字写到一个tff文件里(速度比较快,缺点图片有限,只能有常用的汉字)动态字体:1.要有一个ttf的字体集2.打开Font Maker:里面type前两个是静态字体,Dynamic是动态字体bold是加粗,Italic是倾斜创建动态字体会影响性能(多创建一个DC),还有不能是图集的一部分八、WidgetUIRoot的锚点为,整个UI的中心这个里面的Pivot就是设置整个控件的锚点(这边定死了,不知道能不能改成非单位的改动锚点,一般用不到)深度,一般情况下不会用相同的深度snap就是让图片变回它自身本来的大小Aspect是宽度除以高度得到的九、Anchor锚点(这边是锚点,为什么还要有上面widget里的pivot)但是这边做起来其实和锚点没有什么关系更像是屏幕自适应的一块有2个Type:1.Unified事件发生的时间:有3个时间段:OnEnabledOnStartOnUpdate依据需要更改2.Advanced比Unified高级,就是target可以有多个,而前者只有一个,更加灵活3.里面的上下左右分别是当前控件相对于目标控件的相对位置一般自适应大小,将上下左右分别设置为target的上下左右.要做某个控件(比如小地图)使其中心位置不变,同时在整个UIRoot改变(或者说屏幕分辨率改变的时候)控件大小不变(直观看过去不变,不是相对大小不变),就要将Anchors的上下相对于目标的上下的一个保持固定位置,左右同理。十、Tween补间动画相比NGUI,UGUI没有自带的Tween动画,都是用DoTween插件来实现Tween动画的(后面觉得DoTween还蛮好用就一直在游戏中很多地方都有用到)1.Tweener:给控件attach-tween(等价于给控件增加脚本)(UGUI不带这个,之前还写了一个用来做类于透明度变化的脚本,NGUI里实现的不错,比较完善)这边做的比较完整上面的参数比较清楚,直白,就不加说明1.这边Animation Curve这个功能比较完善,还可以在变化曲线中增加key修改变化曲线2.这边有个Tween Group,动画编组暂时没讲解,个人觉得类于Sequence3.Ignore TimeScale,这个功能蛮好,就是不和游戏的速率挂钩,我觉得可以用协程实现该功能比较简单4.Tween里面有一个Transform,这个脚本里面显示的是从一个Transform到另一个Transform,勾选Parent when finish后,移动完后改控件的父对象为to的Transform(起始位置为from trans的位置)十一、Slider控制声音大小,进度注意:这边我想建立一个空的go然后在空go上挂载slider脚本,添加coliider,然后将前后背景精灵作为它的子对象,拖入脚本中,运行无法触发。所以不能将NGUI的一些响应放在go上alpha:是指定Foreground的透明度若想要将父对象sprite隐藏,直接将UISprite脚本的勾去掉如果用sprite作为slider,一般不用指定bg。若是要显示进度条(可以自己写事件),便捷的是NGUI已经做好了此功能,将label拖入slider的响应消息事件框,然后将函数改为SetCurPercentsteps:就是整个进度条大概分几步走完可以在slider上添加一个Slider Color脚本(NGUI自带的),目的用来做滑动条根据当前的百分比来更改颜色(类于windows程序设计课上做的实验一样),精灵一般使用滑动条的前景十二:Project(一)tips1.可以创建一个widget当做整体的容器2.可以将自己做的UI控件拖入预制体,然后将预制体拖入对应的Prefab Toolbar里面3.给控件挂载脚本就是将脚本挂载的go拖入notify中与UGUI类,然后根据具体需要更换自己写的方法4.为什么我这边游戏开始的时候挂载在控件上的脚本会自动执行一遍,而视频中不会*5.如何获取当前脚本里的函数所匹配的控件:(1).引用(未讲,麻烦)(2).直接用NGUI里面的,控件脚本.current来获取当前触发事件的控件,可以进入该控件类型的脚本查看相关函数(二)界面切换1.给要切换的widget添加一个tween(问题:如果给容器下的一个控件设置了anchor这边好像无法作用移动,还有比如说那些自带动画的控件播放处就无法改变位置)2.设置的public脚本可以将整个go拖进去3.playForward和playReverse,虽然tween脚本播放完会自动enabled = false,但是这两个函数会自动判断,并更改,所以不需手动判断更改(三)技能CD(这个学UGUI的时候有学,但是一下想不起来了)1.使用遮罩来做2.在sprite上创建一个一样大的sprite作为mask3.将masksp的type改为Filled(这边默认Fill Dir的参数就可以实现,调整一下masksp的颜色和透明度)4.Invert Fill倒置填充(四)页面:输入框1.首先创建sprite,添加collider2.添加inputfield脚本3.在进行label大小与sprite匹配的时候,尽量不要改变控件的Transform大小,改动widget大小就好,否在anchor进行匹配的时候就会不好匹配,最重要的问题是label会被压缩4.一般将overflow改为clampcontent5.Input脚本里面默认是default,可以单行和多行转换,如果做单行用submit(这边直接触发提交事件),多行用New Line6.问题:太多行显示不完全7.在多行输入中,若是要将起始输入处(或者说游标处)显示在左上角,可以将label的锚点改为左上角8.校验:1.validation验证(1)Alphanumeric:字母数字的组合(2)UserName:禁止输入特殊符号,中文(3)Password:可以输入任何,显示*(4)Name:适合英文名,不接受中文字符,首字母大写,接受空2.Character Limit字符个数限制3.自己写校验:(此处为验证年龄)(1)声明一个public UIInput input;(2)在验证年龄函数中记录输入框的sting sInput = input.value;(3)然后声明一个存储年龄的int,int iAge; if(int.TryParse (sInput, out iAge)){//对iAge进行判断,相应操作}(4)将挂载该脚本的go拖入该input控件中的OnValueChange中,选择相应函数注意:(3)中要用Tryparse,因为当输入框有改变的时候就会进行相应操作,如果用int.Parse函数的话,如果输入的不是数字就会报错。还有教学视频中直接用submit方法代替是不可取的,只是暂时代替而已。(五)聊天系统1.如何制作一个可拖拽的控件(1)控件collider(2)在Add Component里找到脚本Drag Object(3)将该控件拖入脚本的Target里(4)Drag Effect:(拖动效果),会有一个势能的过程(类于惯性),就是拖动的完后会有一个减速的过程。2.如何改变控件大小(1)控件collider(2)在Add Component里找到脚本Drag Resize Script(3)将要伸缩的控件拖入脚本的Target里(4)还要做好自适应,否则会相对偏离3.scroll bar(滚动条)(1)创建一个bg将collider和Scroll Bar脚本挂载在此sprite上(2)在bg创建子一个sprite控件fg,用来做滑动条,不用添加collider,大小和bg一样大(3)fg拖入scroll bar脚本中,然后改动Direction你要移动的方向,size为前景的size,value即为其(4)scroll bar和slider的区别:scroll可以显示text listslider调节进度,音量大小(5)文本列表:①之前的label只显示固定长度,OverFlow要不然就是压缩字体,要不然裁剪掉,要完整地显示全部的text就要使用TextList。②使用textlist,label里面在执行之前写的文字会清空,所以要在代码里面将文本添加进去③增加了textlist脚本后,label有带collider就可以拖拽显示超出范围的文本了④Paragraph History:记录了可以存储的text行数⑤style:a.text:就是文本从上往下添加b.chat:文本从下往上添加4.问题:(1)在做这些控件的时候,最好将要做的控件的各个组件放在一起(我一开始是将每个种类的组件放一起,然后虽然更清晰,但是要找整个大控件,就变得非常散)(2)在做textlist的时候如果label上面不需要响应事件其实是不用加collider的5.创建聊天系统基础设计(1)创建背景,滚动条,显示文本框,输入文本框,拉伸按钮(可有可无),提交按钮(移动端需要,PC端直接响应回车键)(2)这些内容都有学过,设计布局做,然后自适应(3)脚本内容响应:(此处只是关于输入显示在文本框上)①首先在脚本里面获取UIInput控件,和UITextList控件(可用public拖入或者在Awake里直接get到)②写函数://这边是直接响应回车键public void OnChatInput(){ textList.Add (input.value); input.value = string.Empty;}(六)背包系统1.类于之前的拖拽功能,此处只要将脚本改为Drag And Drop脚本就好2.要实现判断item拖拽结束的位置和拖拽结束的时间要通过重写虚函数来实现3.重写OnDragDropRelease函数(此函数作用判断拖动物体释放后是否有触碰到物体,并且返回触碰物体),作用的物体要加collider4.将此脚本挂载在要拖动释放的物体上5.创建n个背包knapsackcell,布局好,写一个脚本来控制knapsack存放数据6.教程里面做cell数据存放,声明一个go数组。7.做控件拖拽后,位置矫正在重写的代码里面,重置拖动控件的父对象,并且把本地坐标改为0(我之前写的是设为父对象坐标)8.判断控件释放cell是否有物体并且进行交换,只要通过判断该cell的子数量即可(我想的是维护一个表或数组来判断,这边没有必要,哪怕是获取该拖拽物品的信息也可以通过名字来判断)9.当拖动释放的cell里面有物品时,OnDragDropRelease中的参数为该物品,而不是之前的cell了.视频中是直接用KnapSack脚本通过引用来管理label中物品的数量,我是直接通过获取子物体得到label然后进行操作(效率低一些).视频中使用自动叠加的方法,我做的是人为叠加的方法,基本上都会用到。.视频中还漏了一个小问题,如果拖拽到外面是会报错的,我这边有个存储来记录其移动前的位置。private Vector3 vtCurPos;void Awake(){vtCurPos = this.transform.position;}protected override void OnDragDropRelease (GameObject surface){base.OnDragDropRelease (surface);if(surface.tag == "KnapsackCell"){this.transform.parent = surface.transform;this.transform.localPosition = Vector3.zero;vtCurPos = this.transform.position;}else if(surface.tag == "Item"){if(surface.name == this.name){UILabel label = surface.GetComponentInChildren<UILabel>();int iNum = int.Parse(label.text) int.Parse(this.GetComponentInChildren<UILabel>().text);label.text = iNum.ToString();Destroy(this.gameObject);}else{Transform parentTrans = this.transform.parent;this.transform.parent = surface.transform.parent;this.transform.localPosition = Vector3.zero;surface.transform.parent = parentTrans;surface.transform.localPosition = Vector3.zero;}}elsethis.transform.position = vtCurPos;}tip:①之前创建东西都是从1~n,但是如果要取go的name的标号来判断的时候会比较麻烦,因为最后的int个数不一致,所以最好可能到多少位就统一写多少位②a)int.Parse是转换String为intConvert.ToInt是转换继承自Object的对象为int的.比如你得到一个object对象,你想把它转换为int,用int.Parse就不可以,要用Convert.ToInt,b)Convert.ToInt(string) 方法遇到空时会返回0,而Int.Parse则会Throw Exception.还可以使用Int.TryParse方法更加安全。(七)血条1.做法类于slider,不加collider而已2.显示的是血量,一般用当前血量/总血量,百分比较少3.导入NGUI_HUD_TEXT包4.血条人物跟随:在血条上添加脚本UIFollowTarget,拖入跟随物体,拖入带MainCamera标签的camera,还有UIRoot下的camera5.因为血条一直跟随物体的中心点,我们所要跟随的go下创建一个空go来代替之前的target,将再将此go拖拽到要显示跟随物体的某个位置6.一般做血条,先创建一个widget用来挂载脚本(process和followtarget),然后创建前景和背景,分别拖入。(这个容器可以用sprite,不想让它显示图片将Atlas设置为null)。这样以容器挂载脚本就可以响应物体从渲染摄像机下消失将容器下的控件都禁用,而不会产生前景消失背景还留着。(容器也可以用一个空的go来代替)7.disable if invisible:在go移出屏幕外,就将血条禁用,提高性能,节省开销(禁用的只是挂载脚本下的子控件)8.做文字(名称)跟随类于做血条的步骤9.显示伤害或治疗效果:在一个空的go上添加HudText脚本,在true type font上添加动态字体然后在添加一个自己写的脚本MyHudText,在MyHudText脚本里面获取到HudText hudText,然后在响应事件里面加入hudText.Add();里面三个参数,第一个是失去或者增加的血量,二是血量的颜色,三是存在的时间,显示的位置在go的位置(在某段时间里面多次响应事件,数会自动累加).运行时显示的血量是在该空go下创建生成的label(多显示的才会创建),该label不会自动destory.HudText的参数解析:Gradient里面就是NGUI里面的渐变字体该脚本的参数和NGUI里面的参数差不多重点:Offset Curve:偏移曲线Alpha Curve:透明度曲线Scale Curve:大小曲线都是类于Tween的操作,可以更改曲线tip:1.导入新的插件包,在打包前把包内examples以及一些无用的资源删了,以免打包会把这些资源打包进去2.更改Tween曲线在曲线上右击可以添加Key,端点处右击类型可以更改该Tween的类型3.UIFollowTarget可以让任意一个控件跟随一个3维世界里面的物体移动4.类于MyHudText这样的响应事件的脚本最好挂载在触发事件的go上十三、音效2.给按钮点击添加声音可以在改控件下添加PlaySound脚本(NGUI自带的),声音NGUI有自带几个,可以在点开后,左下角小喇叭可点击预览3.pitch,查的是音高,视频中讲解为速度4.新版的NGUI添加了几个声音的触发触发时间5.OnClick在按钮上点击后,在按钮外释放不触发声音OnClick是OnPress和OnRelease的集合十四、游戏参数1.音乐大小2.游戏难度3.操作方法4.是否全屏十五、PopupList下拉列表,弹出列表1.在创建完sprite后给精灵加collider后加PopupList脚本改变其弹出列表2.当要在sprite上显示其当前选中文字的时候,给sprite上添加一个label,然后将label拖入OnValueChange,选择方法SetCurSelection(类于显示百分比的方法),NGUI已经做了很多工作,让制作UI更为便捷,像UGUI类于这种问题得自己写脚本实现这些功能3.popuplist里面的background,HighLight是指弹出的下拉框的背景,前景的图片和颜色4.Animated:开启后会有下拉框的弹出动画效果,以及换选别的选项的跟随效果5.padding:行距和边距*6.在存储的文本里面修改枚举类型,使用判断语句或者switch,case,并且在判断的时候将current.value.Trim();(将最后的换行符去掉)(自己做的时候想能不能强制转化,发现不行,后面看了下教程,用判断做,后面再测试的时候还以为是中文不能匹配,自己想到了是因为换行的问题,然后在case字符串后加换行符,发现不行,看教程后改用Trim函数)若还是不能显示中文,有可能是改字体不支持中文不知道为什么我的unity3d是不是有bug,无法在scene上通过右键来创建控件等,还有就是创建任何与label有关的控件,起始的字体总是为空,导致一些控件无法响应十六、CheckBox单选框sprite-collider-togglescript1.UISprite:当选择的时候显示,不选择的时候隐藏(starting state起始显示)2.Transtion:Smooth平滑的显示,透明度递增;Instant,立即显示
二、UGUI 个人觉得用起来比较方便,毕竟是最先上手的UI,虽然有些地方还是有点欠缺。
UGUI也是网上的教程学的,但学的不多,只学了一些基础的只是,后面比较深入的东西还没学,就硬着头皮开始做项目了,不过项目里面涉及UI的部分不是特别多,而且我也只是做了一半。
当时的教程地址没有在收藏夹里找到,做项目的时候更多是拿官方案例,根据上面的已有的东西,自己学习一点。
个人学习:
1.canvas模式overlay好处:摄像机前面不需要灯光,不需要摄像机,类于NGUI,UI将永远显示在所有摄像机的最前面,但是如果要在UI前加特效是无法实现的, 适合做游戏的正式界面,(做场景游戏,各个关卡,ui只是显示数,血量,魔法,宝石)camera模式:必须使用摄像机,要绑定摄像机,和NGUI原理很像(雨松momo说的),想在UI前加特效可以创建一个摄像机深度大于这个UICamera就行。 移动摄像机,画布会随着移动,可以做UI的衬托(可以做一个很炫的UI) 该模式下的Plane Distance:建议-之间,越大可以放置的东西越多world space:完全3dUI,把UI当做3d对象一般1、2用的最多2.摄像机是不是主摄像机和它的名字没关系,和他的标签有关系3.Canvas Scaler组件,关于画布的大小(一般使用第二个)constant pixel size固定像素大小:scale with screen size按照屏幕大小:constant physical size固定物理大小:屏幕自适应:下面有match是匹配模式,screen match mode一般使用前两个,第一个是匹配宽高,第二个是扩展4.所有的ui组件都会显示在canvas里面,canvas是所有控件的父对象5.ugui下,若有多个canvas,里面有sorting layer排序层,就是canvas的层6.panel控件(面板):可以将panel弄小一些放置其他控件,可以在panel上放置一些控件,该控件类gameobject可以将上面的控件整体移动, 便于整个的管理控件,整体移动和整体处理,面板上可以添加颜色信息和图片信息,“容器”,功能完备的UI界面会有 panel多个控件*7.EventSystem(事件处理器):作用:事件处理,独立输入模块,触控输入模块 这些处理都可以做整体的管理8.UGUI核心控件:UGUI控件都是Rect Transform,Canvas Renderer每个控件都有的画布渲染,任何控件的中心都有锚点(1)Text控件:字体文件扩展名ttf,可以在C:WindowsFonts下找,找到后可以直接拉到文件夹里,字体显示不开,要把整个文本控件范围拉大, Rich Text:富文本,选中后将某个或某段文字嵌入<color=green>文本</color>(颜色用十六进位数字) overflow(溢出): 选择overflow字体就会溢出范围,选择wrap截断 最好使用best fit(2)Image图片控件:做成精灵(只是做2d的UI),可以直接将PSD文件拽入,u3d会将所有图片的压缩式以另一种方式储存,不需创建图集, 会 自动创建图集 sprite贴图的一种形式,要将图片导入image控件,首先要将贴图的类型Textrue Type改成sprite 贴图转化后,它下拉菜单栏里新加的文件是用来u2d将图片分割用的 其中(EGUI和LGUI)Edit GUI and Legacy GUI是传统的GUI,4.6之前,选择这个选项,图片不会拉伸(类准心就得用这个) sprite比传统适用范围更窄,但是效率更高 shift键拉贴图同步放大缩小 material复杂的材质才用得到 *Image Type: simple简单:展示贴图的原始风貌 sliced片(做背景比较好,用的比较多):图片要有边框,选择精灵然后精灵编辑sprite editor,做出9宫(面片),使用这种类型边框会很细腻 边框不变(边框很平滑),做放大的只是内部,中间没有填充物的单一的放大(比NGUI好这边是可视界面操作) tiled平铺(做背景):用一些小图片做背景比较好 filled填充(控制图片出现方式):做一些贴图特效,比如说将图片遮住一半或者按角度遮住,可以用脚本控制让图片渐渐显示出来 可以拿来做进度条或者时钟(填充bottom,填充方式度) Preserve Aspect(保存方面):长宽比等效,将空间里的图片,固定长宽比伸缩 set native size:将图片改为原始大小,美工定好了就可以选中 贴图参数:
(3)button控件:button控件包含image,还包含text控件 Image负责外观, Button: Interactivable(互动性,是否启用):类于是否激活该按钮,可由脚本控制 Transition(过渡方式): ①color tint(色彩过渡,默认状态最常用): normal正常显示的颜色 highlight经过的颜色 press点击的颜色 disable禁用的颜色 fade duration:变化快慢//可以做成渐变 ②None: ③Sprite Swap(精灵交换,需要使用相同功能不同状态的贴图): 3个地方放置3个图片 ④Animation(动画,最复杂,效果最绚丽): 点击生成Animation,点击该button然后windows下的animation调动画 在帧数上选择帧数1,对第一帧进行操作,红色是记录模式 animator controler动画状态机,左边红色的是录制按钮,动画做完后点击结束录制 给分别每个状态加动画 button事件:写UI脚本要加头注释:using UnityEngine.UI OnClick做的是委托事件锚点(屏幕自适应):可以拉伸unity界面的scene界面模拟屏幕改变 9.给image增加个Canvas Group组件,然后不勾选Blocks Raycasts选项,就可以穿透并点击到后面的按钮了.你可以在容器上加一个CanvasGroup组件,可以改整个子元素的透明度 直接改color,就是改它的Material的color,所以就改到那个共享的Sprites-Default 材质了
这边写的不多,也不是很完善,更多是要自己去学,去问,后面如果相关资源更多,学习起来也会更加方便,很多东西自己探索会更好一些。
三、UGUI和NGUI的区别
之前有说两者之间的差别,这边会进行一些对比,大部分从网上转载过来,我在个人学习里面也有讲一些。
(一)、(UGUI与NGUI优缺点对比)原帖: 1、uGUI的Canvas 有世界坐标和屏幕坐标 2、uGUI的Image可以使用material 3、UGUI通过Mask来裁剪,而NGUI通过Panel的Clip 4、NGUI的渲染前后顺序是通过Widget的Depth,而UGUI渲染顺序根据Hierarchy的顺序,越下面渲染在顶层. 5、UGUI 不需要绑定Colliders,UI可以自动拦截事件 6、UGUI的Anchor是相对父对象,没有提供高级选项,个人感觉uGUI的Anchor操作起来比NGUI更方便 7、UGUI没有Atlas一说,使用Sprite Packer 8、UGUI的Navgation在Scene中能可视化 9、UGUI的事件需要实现事件系统的接口,但写起来也算简单当然他们有各自的优缺点: 1、NGUI还保留着图集,需要进行图集的维护。而UGUI没有图集的概念,可以充分利用资源,避免重复资源。 2、UGUI出现了锚点的概念,更方便屏幕自适应。 3、NGUI支持图文混排,UGUI暂未发现支持此功能。 4、UGUI没有 UIWrap 来循环 scrollview 内容。 5、UGUI暂时没有Tween组件。
(三)、(Unity3D NGUI,uGUI总结)原文: raycaster调整到恰当选项2.防止canvas在物体上层,点击canvas却穿透到物体上,触发物体的点击的事件,请参见下面示例代码NGUI注意点:(超级影响性能的几点)1.动画最好作用于panel而不是sprite2.Sprite Type中的tile能不用就不用,卡死人
这篇文章差不多就写到这了,如果后续还有更多的学习还会有相应的更新,特别是以后公司里面使用NGUI,参与项目里面,应该会有更多的收获。
版权声明:本文为博主原创文章,未经博主允许不得转载。
Unity3D读取XML文档信息 C#中可以用XmlDocument类操作Xml文件例如要读取如下Xml文件1root2personname=WangYao3age/age4/person5personname=Jobs6age/age7/person8/root程式如下1XmlDocumentdoc=newXmlDocument();
UnityC# MD5验证 孙广东.6.数据经网络传输后会变得非常不安全,最简单有效的解决方案是给数据加一个密钥,使用MD5算法算出校验码,服务器收到数据和校验码后
Unity3d好文汇总 ExecutionOrderofEventFunctions(Unity事件函数执行流程)
上一篇:unity3d移动平台性能优化专题16:性能优化实战之20个复杂单位战斗(unity移动端教程)
友情链接: 武汉网站建设