《Unity 3D NGUI 实战教程》一2.3 制作第一个UI图集

简介:

本节书摘来异步社区《Unity 3D NGUI 实战教程》一书中的第2章,第2.3节,作者: 高雪峰 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 制作第一个UI图集

Unity 3D NGUI 实战教程

2.3.1 学会解剖UI的资源结构

为什么要剖析UI的资源结构?因为通常情况下,策划设计好UI的功能和大概布局之后,美术人员会做出一张UI的成品效果图,我们称之为UI设计图。然后,客户端程序需要根据自己的制作方式,告诉美术人员如何分割出相应的UI元素提交给程序,以完成制作。


17

下面以图2.17所示的UI设计图作为例子来讲解分析。首先说明一点,客户端程序一定要同时拿到UI设计图和UI功能描述文档才能彻底知道这个UI会进行什么样的操作逻辑,此时才能准确地对UI资源结构进行剖析。主要有以下一些方法。

看设计图,从相关设计文档了解该UI的功能。
在不了解UI功能的情况下,程序只看设计图不一定能准确地明白这个UI的全部用途,为了减少返工,请务必先了解该UI模块的全部功能。如图2.17所示,则是一个典型的登录UI。

观察UI的设计图,判断哪些字是程序可以写的,哪些字是程序写不了的。
在图中我们发现有“登录”“请输入账号”“请输入密码”等Label。其中,“请输入账号”和“请输入密码”两个标签的文字并没有什么特殊的美术效果,完全可以由程序来完成,就不需要美术提供图片资源了。

而“账号”和“密码”两个标签,虽然本图中可以由程序完成,但是如果碰到那种有特殊美术效果(比如,文字上有华丽的渐变和高光等效果,程序是完成不了的)的,则需要让美术提供一张写有相应文字的图片,用Sprite去代替这个Label。

后文我们会详细讲解什么情况下使用Label。

通过设计图判断哪些是Sprite,充分考虑复用性。
凡是零碎的、小的图片资源,都可以是Sprite。如图2.17中,输入账号密码有一个底框,整个界面又有一个底框,这些都可以让美术人员切成单独的Sprite,然后由程序来进行拼装。

在分割Sprite时,尽量分割得细一点,如图2.17中所示,我们可以将整个UI的大底框和输入账号密码的两个底框合并在一起切给程序,但是这样将导致这个UI图片无法用于其他地方。如果整个UI的大底框和输入账号密码的两个小底框分开来切,那么以后其他需要用底框的地方,就可以复用图中切出的UI资源。

相同的UI元素只需要一份就够了,例如图中输入账号的底框和输入密码的底框是一样的,于是只需要切出一份就可以了。

后文我们会详细讲解什么情况下使用Sprite和Texture。

通过设计图判断出按钮资源的制作方式。
按钮笼统地分有两种形式,一种是普通按钮,也就是一张没有文字的按钮图片,程序人员在需要用时,就在上面写上“确定”等不同的、当前所需要的文字。另一种按钮则是图片按钮(以前旧版本NGUI的ImageButton),这种按钮的特点是整个按钮就是一张图片,它既是按钮也是图片。

如图2.17中所示,登录和注册两个按钮几乎一模一样,只是上面的文字有区别,而“登录”和“注册”这几个文字明显是程序可以写出的文字效果,于是可以让美术人员切出一张普通按钮资源的底图,然后程序再在上面写字。

后文我们会详细讲解什么情况下使用按钮。

通过设计图判断其他控件。
要比较迅速地结合UI的功能判断出UI中的一些其他控件,例如假设这是一个人物生命法力的状态栏,那么一定要区分出UI中是否有用来显示人物生命法力值的进度条,如果有进度条,则进度条需要上面切一条表层条,下面切一个空槽底板条。

后文我们会对相关知识进行详细说明。

在剖析UI资源结构的时候,有无数种方案,每一种方案UI美术人员基本都能完成,程序人员也能完成相应的功能。但是,我们一定要通过充分的分析去使用一种相对更好的方案,这样对项目以后的修改和拓展都有好处。在剖析UI资源结构时一定要秉承以下几个原则:

尽量保证还原设计图的效果,不损失质量,这是前提。
尽量发现重复的元件,而且重复的元件只需要一份就足够。
尽量分割得零碎一点,避免多个元件合并在一起出图,这样对项目不利(后文会详细讲解)。
尽量使用九宫格来制作比较大的底板、底框等(后文会详细讲解)。
UI切图全部让美术人员以PNG格式导出。

2.3.2 如何导入切好的美术资源

当美术人员提交给你大量零碎的UI元件时,就可以开始进行UI的制作了。制作的首要任务是先将资源导入到引擎中去。首先在Unity的Project窗口下的Assets文件夹下面建立一个文件夹,将该文件夹命名为Resources,表示这个项目的资源都放在这个文件夹下面,UI资源也不例外。这个文件夹名字一定要设定为Resources,不能改动。

这里讲一下为什么一定要设定一个名为Resources的专门的资源文件夹。Unity开发中,如果涉及动态加载(在游戏中触发了某个条件才需要加载)的情况,比如需要临时生成一个烟火特效等,都会用到Unity的资源加载方法:Resources.Load();这要求需要被动态加载的资源一定要放在Assets下面一个叫Resources的文件夹中。而UI经常会涉及根据不同情况动态加载UI模块的情况,所以一般情况下,我们都会将UI的资源放在Assets目录下的Resources文件夹中。

但是也不是所有资源都放在Resources文件夹中就万事无忧了。因为Unity在生成游戏安装包时,对于Resources以外的文件夹,只会打包场景中用到的资源文件,而对于Resources文件夹,因为涉及动态地往内存里加载资源,所以Unity会无条件的全部打包。如果不加考量的把所有资源都放到Resources目录下,可能会导致最终得到的游戏安装包体积变大。

这时我们可以在Resources目录下建一个名为UI的文件夹,用来单独存储UI资源,以避免UI资源和其他的角色、特效等资源放在一起难以管理。全部选中美术人员提交的UI元件,一起拖曳到Unity界面中的“ResourcesUI”目录下,等待Unity读取资源之后,我们导入的资源会显示在“ResourcesUI”目录下,这样就完成了资源的导入,如图2.18所示。


18

2.3.3 用Atlas Maker制作图集

刚刚我们已经将UI元件的源文件全部导入到了Unity中相应的文件夹目录下,在Unity的Project窗口中全部选中刚才导入的UI元件,单击鼠标右键,选择最顶部NGUI菜单,选择Open Atlas Maker(Atlas Maker是NGUI自带的一个UI图片打包工具),这样就能自动将这些UI元件放入到Atlas Maker中,如图2.19所示。

在Mac系统下,右键菜单如果没有NGUI选项,那么可以选中导入的UI元件,在Unity顶部的菜单栏中,选择NGUI菜单,然后选择OpenAtlas Maker即可。

打开后的Atlas Maker界面如图2.19所示。


19

图2.19中,标号为1的红框是已有图集的选择按钮,如果你需要将这些新导入的UI素材资源全部新增到一个已有的图集里,就可以单击这里。单击后能看到当前项目工程中已有的所有的图集,然后可以选择其中一个图集,此时标号为2的红框处的按钮将变成Add/Update,这样就可以新增或者更新这批资源到已有的选定的图集中了。

图2.19中标号为2的红框是主按钮,当要打包的UI素材资源没有选定打包到某个已有图集中去时,这个主按钮会显示Create,意为用这些资源创建一个全新的图集。如果通过标号1的红框处的按钮选择了一个已有图集的话,这个主按钮将变成Add/Update,意为新增/更新当前这批UI资源到选中的图集中。更新的机制为同名的Sprite图片将会被替换。

图2.19中标号3处的红框显示的是当前选中的UI图片资源的序号和文件名称,标号4处的红框显示的是这些资源哪些是新增的;哪些是更新的;哪些是已有的。在这里,如果选中了一个已有图集,那么该图集中的Sprite也会一起显示出来,如图2.20所示。在图2.20中,红框1则表示当前选中了一个已有的名为Fantasy Atlas的图集。红框2是编辑图集和新建图集的按钮。红框3的按钮由Create变为了Add/Update。红框4显示出了该图集已有的Sprite,在最尾部有一个删除按钮,单击之后,将会从这个图集中删除该Sprite。如果此时单击Add/Update按钮,那么Sprites列表中尾部标记为绿色的Add的精灵图片将会被新增到这个图集之中。

如果需要更新现有图集中的某一个精灵,则将新的精灵图片文件的名字设为和它要替换的精灵的名字一样,然后按照以上步骤选择它要替换的精灵所在的图集,单击Add/Update即可实现直接替换资源。这在项目开发中是非常实用的,当美术人员希望修改UI资源、用更新的UI资源替换之前的旧资源时,这个自动更新功能将会让程序员非常方便。


20

下面继续创建属于我们自己的第一个图集,当打开Atlas Maker之后,我们看到的是图2.19所示的界面。我们需要创建一个全新的图集,所以单击Create主按钮,然后会弹出Save As对话框,将路径定位到ResourcesUI目录下,然后将图集的名称改为“MyFirstAtlas”,单击“保存”按钮即可,如图2.21所示。注意,不要改变文件的后缀名,文件保存后是一个Prefab。


21

单击“保存”按钮之后,我们可以看到Atlas Maker界面已经变成了如图2.22所示的情况,这表明图集已经创建成功,中间的主按钮变成了View Sprites,单击后可以预览该图集中所拥有的精灵。


22

关闭Atlas Maker界面,然后注意看Project窗口中,ResourcesUI目录下除了我们之前导入的UI图片资源以外,多出了3个名为“MyFirstAtlas”的文件,如图2.23所示。这3个文件是一个图集必须具备的3个文件:图集的贴图、图集的材质球和图集的预设体。其中,第一个球形图标的MyFirstAtlas文件为图集的材质球;第二个蓝色方块的文件为图集的预设体;第三个图片缩略图文件则是图集的贴图,也就是精灵合成为一张整图之后的图片。

至此,我们的第一个图集就算制作完成了,这个图集在后面制作UI时就可以直接使用了。针对Atlas,还有很多功能和用法,例如九宫格等,我们会在本书的后半部分讲到。

特别注明:在制作完UI图集之后,我们可以将之前导入Unity的UI资源源文件删除以减小资源量。


23

相关文章
|
25天前
|
消息中间件 存储 JSON
rabbitmq基础教程(ui,java,springamqp)
本文提供了RabbitMQ的基础教程,包括如何使用UI创建队列和交换机、Java代码操作RabbitMQ、Spring AMQP进行消息发送和接收,以及如何使用不同的交换机类型(fanout、direct、topic)进行消息路由。
19 0
rabbitmq基础教程(ui,java,springamqp)
|
3月前
|
编解码 前端开发 vr&ar
从零开始的PICO教程(4)--- UI界面绘制与响应事件
这篇文章是PICO开发系列教程的第四部分,主要介绍了如何在PICO 4 VR环境中创建UI界面,包括Canvas和Panel的配置、UI元素的绘制、以及Button和Slider的事件响应绑定,并通过示例展示了数字增减和滑块功能的具体实现。
从零开始的PICO教程(4)--- UI界面绘制与响应事件
|
2月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
117 3
|
3月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
115 3
|
3月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
210 0
|
3月前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
68 1
|
3月前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
2月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
133 0
|
3月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
102 0
|
3月前
|
开发者 图形学 C#
揭秘游戏沉浸感的秘密武器:深度解析Unity中的音频设计技巧,从背景音乐到动态音效,全面提升你的游戏氛围艺术——附实战代码示例与应用场景指导
【8月更文挑战第31天】音频设计在游戏开发中至关重要,不仅能增强沉浸感,还能传递信息,构建氛围。Unity作为跨平台游戏引擎,提供了丰富的音频处理功能,助力开发者轻松实现复杂音效。本文将探讨如何利用Unity的音频设计提升游戏氛围,并通过具体示例代码展示实现过程。例如,在恐怖游戏中,阴森的背景音乐和突然的脚步声能增加紧张感;在休闲游戏中,轻快的旋律则让玩家感到愉悦。
79 0