版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本教程主要是面向WEB3D开放方向的朋友而些的,也有助于以前的的DIV+CSS设置者在利用U3D设计3DWEB的时候,有个清醒的认识。本教程主要是面向WEB3D开放方向的朋友而些的,也有助于以前的的DIV+CSS设置者在利用U3D设计3DWEB的时候,有个清醒的认识。很多初学的朋友在做U3D的UI设置的时候,对U3D的GUI与GUILayout相关的BUTTON、Label、TextArea、TextField等等类概念十分模糊。奇怪于为什么会有种状态的按钮,标签、文本域、文本输入框等等。其实如果您以前是从事个Web页面设计的专业人士,你会对这些东西的认识,尤感清晰。在我们以前的网页设计中,为了便于排版,我们总是用表格或是DIV将一个完整的UI进行切片处理,这样做的好处是使页面的设计更加的整齐划一。而在U3D中,这种块状分布式的处理操作,就得力于GUILayout。下图展示了一个网页,根据其各个板块的不同功能,而被切割成不同的区域,用来承载本区域内的图片、文字、按钮、Flash等。养品粉本固热厂IQ 蠹排主藏m艾死工遂件耳:笥新;i下注蚓事广定汐••游哉以13y32r■■■■■.wwwr13y32r.com养品粉本固热厂IQ 蠹排主藏m艾死工遂件耳:笥新;i下注蚓事广定汐••游哉以13y32r■■■■■.wwwr13y32r.comi0曰gWE ■■.,■―11曰*• 111曰,I等客[-L年—樗旱机蹒下凭阳君瞄述电子杂志带有点;备惧此染志更多》。岷讽吒洗电于迎吉ra小呻厅切'.后木□宣内韶嗥示2H王内匿史廉示03舄涌页'缰产品和血洵产品定械I〕牯郭由士1'翟Wr蜡噱菜褊〕指训在坡电干杂志jll.lSitJS./sEl工业雄计展示■I别墅砌销害展示□归北如为去我演由于GUI类名下的按钮控件定义方便,十分灵活,在U3D的游戏制作中频繁被使用和出现。但它实质上只相当于WEB中的浮动块的功能。所谓的浮动块是游离整个UI上面的一个区域,它的大小位置由自身所确定,而不由排版模块来确定。这种UI设计的好处是随心所欲,比较灵活。但对于过于繁重的UI设计来说,并不是一件好事。因为你要为每一个GUI元素都单独定义一个位置和大小参数。其实GUI.Button这样的控件更容易学习和掌握,但不利于大量的UI编排工作,所以笔者在下一节会结合CSS来为大家讲述GUILayout的使用方式。Css盒子与GUILayout在上一节中,我们大致了解了GUI与GUILayout存在的一些差异。在这一节中我会举一些例子,来为大家详细讲述利用GUILayout做UI排版的好处。我首先在脚本的OnGUI()函数体中,添加两段按钮代码,一段是GUI.Button如下所示:GUI.Button(newRect(100f,100f,100f,50f),"HelloGUI.Button");以及一段GUILayout.Button代码如下所示:GUILayout.Button("HelloGUILayout.Button");在整个输入的过程中,我们发现,GUI.Button需要我们必须为该对象配置一个Rect参数,来设定按钮的位置100f,100f和它的尺寸大小100f,50f,以及按钮上显示的文字'HelloGUI.Button"。但GUILayout.Button并不要求我们输入限制性能容(位置、大小),只要我们输入显示内容"HelloGUILayout.Button"o运行之后的效果如下所示:HelloGUILayout.ButtonHelloGUl.Butto大家可以看到GUI.Button由于设定的宽度不够,不足以装下里面的文字,而使得里面的部分文字被剪裁掉了。而GUILayout.Button不需要设定位置和宽度,它在显示的时候,则是以刚好能容纳下全部文字的宽度来显示的。这和我们网页中的没设定样式的DIV是不是相似?那U3D里面有没有类似DIV的标签呢?用来承载我们切片区域,设定切片区域的大小和位置呢?答案是:有的!它就是BeginArea家族,主要包含了GUILayout.BeginArea、GUILayout.BeginVertical、GUILayout.BeginHorizontal这三大要素。它们和DIV很类似,对应着三个各自的结束标签GUILayout.EndArea、GUILayout.EndVertical、GUILayout.EndHorizontal,中间包裹这该块内所需要显示的内容。GUILayout.EndArea默认情况下,会让内部成员在没有设置样式的情况下,宽度等于自身的宽度-自身的Padding像素-内部成员的Margin
像素。对于大多数初学者,可能会有点不太明白Padding、Margin是什么东西,那么在这里笔者借用CSS盒子里面的一张图来说明一下,如下图所示:MARGIN边界BORDER框边PADDING填充CONTENT填充CONTENT填充BOX简单来说,Margin、是用来规定该块从边框到另外一个块之间的距离的。而Padding是用来规定边框到内部填充之间的距离的,这个概念尤为重要,因为对于像Button这类的空间来说,只有“Conten填充区域才会有热点触发,其他区域,即便你能看到,也不会有触发。在Web中,大家可以写一个CSS来完成对改标签的盒子样式的个性化设定,那如何做到在U3D里面对盒子样式的设定呢?答案很简单,U3D把所有的GUI元素样式都集成在了皮肤样式控件里面中,您可以使用GUIStyle来单独给该Object上面的GUI添加一个样式。也可以用样式集合控件GUISkin来完成对多个GUIStyle的统一设定,包括默认样式Box、Button等等。下一节我为大家详细的来做一个例子,大家就明白了。GUILayout实战接着代码如下所示:GUILayout.BeginArea(newRect(10,10,300,300));GUILayout.Button("A");GUILayout.BeginHorizontal("”,GUILayout.Width(290));GUILayout.BeginVertical("”,GUILayout.Width(250));GUILayout.Button("B1");GUILayout.Button("B2");GUILayout.Button("B3”);GUILayout.Button("B4");GUILayout.Button("B5”);GUILayout.EndVertical();GUILayout.Button("D”,GUILayout.Height(120));GUILayout.EndHorizontal();GUILayout.Button("C");GUILayout.EndArea();这里我们先用GUILayout.BeginArea卡住了按钮的区域的位置和大小,生下来就是在该区域进行内部编排了。其中GUILayout.Width是限定内部块的宽度,GUILayout.Height(120)是限定内部块的高度。剩下来我在下一节,将给按钮添加特定样式,让后各个块显示各自的区域背景,然后利用Padding、Margin以及GUILayout.Space来调整内部板式各个块之间的间距。CSS样式级联与GUISkin和GUIStyle之间的关系在前面的一个小节,我们已经能使用GUILayout做一些简单的排版工作了。但它排版的样式可能并不能令你满意。比方说,有的朋友就想让这样的按钮之间变的紧凑一些,这该怎么办呢?在网页设计中,我们可以规定通过CSS设置一个块的Style,而在Unity3D中,我们则可以使用GUIStyle和GUISkin来设置常用块的Style,或是自定义块的Style。那GUIStyle和GUISkin又有那些具体的区别呢?其实GUIStyle特别像CSS里面内级联样式,而GUISkin则像一个外级联样式。GUIStyle通常委派给一个脚本里面的所有GUI元素
使用;而GUISkin则是您在“Project”栏中创建好之后,在监视面板中定义好所有特定样式,然后通过“级联”的方式导入到脚本里面,给相应GUI元素使用的。GUISkin相比GUIStyle来说有着更好的重用性,但缺点也是显而易见的。在使用的脚本中会导入许多该脚本GUI并不需要使用的样式。首先我先来做一个GUIStyle例子:首先我们新建一个GUIStyle的全局对象MyGuiStyle,如下所示。publicclassNewBehaviourScript:MonoBehaviour(publicGUIStyleMyGuiStyle;再接着,我们让OnGUI函数里面的GUI元素使用该样式如下所示。voidOnGUI(){GUILayout.BeginArea(newRect(10,10,300,300),"",MyGuiStyle);Insp&rtorNear1000Pli'/er1Setting畚LI】:;NewDehavioio廷1:y32rl?gi:就13y32rlogabenderTextu=HierarchyCheats- ■"DepthRenderingPathInsp&rtorNear1000Pli'/er1Setting畚LI】:;NewDehavioio廷1:y32rl?gi:就13y32rlogabenderTextu=HierarchyCheats- ■"DepthRenderingPathTarcietTextui号faJemo.Chdemo韵l-erricSceneGizmosMaterialsModelsQNewGUISkin「NewTerrain巳日已>JLiIITextColorHewerActiveFocusedOnNormalOnHoverOnActiveOnFdcusedDirectionalMainCiTerrainSr.iptNyGuiStyleNamehlermalVFlareIjyer『Au-^ioListener①选中4然后我们运行一下场景,可看到如下所示的效果:这里需要给大家详细解释一下,这个样式控件里面的具体参数:首先我们可以看到Normal、Hover、Active、Foucused、OnNormal、OnHover、OnActive、OnFocused卷展栏,这些参数都带有一个Background和一个TextColor属性,我们可以把这些卷展栏叫做状态卷展栏,因为它们主要是用来指定块的各种状态。Normal、Hover全部块属性都能运用的状态卷展栏,它用于指定该块普通状态下的背景图片和文字颜色,以及鼠标经过该块时候的背景图片和文字颜色;Active主要用于按钮块,用于定义按钮被激活时候的背景图片和字体颜色;Foucused主要用在窗口,文本框等容易获得焦点的块的背景图片和字体颜色;而OnNormal、OnHover、OnActive>OnFocused这主要用于按钮和BOX等能被激活、能获得焦点的块,表示当该按钮被激活之后,普通状态,经过状态,激活状态、以及获得焦点之后的背景图片和字体颜色。接下来我们可以看到Border、Padding、Margin、Overflow这四个属性,其中的Border、Padding>Margin和我们之前讲到的CSS中的盒子概念完全一致°Border表示该块边框的大小,Padding表示边框到填充区域之间的距离,Margin表示块与块之间的距离。这里我要重点给大家说一下Overflow,因为在CSS的盒子里面是没有这个东西的,它表示了块向内,或向外延伸的渲染范围,但它并不会影响到热区范围的大小。有那这些知识,我们现在将原先制作的按钮重新的设置一下样式,让它们排列的紧密一些。但如果这个时候,我们去是GUIStyle就会显得很麻烦,因为我们要给每一个Button都去制
定一个引用样式。所以为了方便起见,我这里使用了GUISkin,因为GUISkin自带了所有的块的默认样式卷展栏。我们在“Project”栏中点击鼠标右键——>“Create”——>“GUISkin”,新建一个外联的GUISkin控件。打开刚才的那个脚本,为GUISkin控件添加一个外联接口,如下所示:publicclassNewBehaviourScript:MonoBehaviour(publicGUISkinMyGuiSkin;3.4.保存脚本,在“Hierarchy”面板中选中附带着该脚本的对象,在监视面板中向MyGuiSkin接口处拖放我们新建好的GUISkin控件,如下图所示:3.4.ProjectGreste*ProjectGreste*13y32rlogo■Audio函demciChdemaSD&moSceneft!GismcsfilMaterials・ModelsGUISkinNewTerrainSNen&ehaviQurScriptftlTextures丁¥呼Au时2丁¥呼Au时2Li ■JNewUehaviourScript(ScrWIScriptMipfTiliEinMyGu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文科生国企职业发展指南
- 【高三下】哈三中2026年高三学年第四次模拟考试语文试卷+详解
- 脱酚工安全综合考核试卷含答案
- 化工添加剂生产工岗前流程考核试卷含答案
- 天线线务员安全教育水平考核试卷含答案
- 干法熄焦工操作评估能力考核试卷含答案
- 阑尾炎患者的生命体征监测护理
- 2026摆渡人殡葬面试题及答案
- 2026百日行动面试题目及答案
- 透析患者低血压的护理经验分享
- 2026届浙江省普通高等学校招生全国统一考试仿真历史试题(含答案)
- 安徽省A10联盟2026届高三5月最后一卷历史试卷(含答案及解析)
- 智慧护理:护理创新的实践探索
- 2025-2030年老年交友相亲行业深度调研及发展战略咨询报告
- 2026年上海市春考语文试卷及答案
- 山东省青岛市2026年中考英语试题
- 2026年普通动物学通关试题库及参考答案详解【达标题】
- 20kV及以下配电网工程预算定额(2022版)全5册excel版
- 《智慧旅游运营实务》 课件全套 模块1-6 智慧旅游发展认知 - 智慧旅游规划指引
- 2026年十五五时期东北全面振兴取得新突破战略规划深度解读
- SAE AS9100D 航空航天质量管理体系培训课件
评论
0/150
提交评论