朋友,大家晚上好。 我是秦培。欢迎关注我的博客,我的博客地址blog.csdn.net/qinyuanpei。近期博主開始研究NGUI了,由于NGUI是Unity3D中最为流行的界面插件,所以不管从学习还是以后工作的角度来看, NGUI都值得我们去深入的研究和学习。

那么,从今天起,博主将为大家带来NGUI的系列文章,希望大家能继续关注我的博客,写简单、有用、优雅的代码一直是博主编程的主旨, 所以博主在写每一篇文章 时,都力求给出简单、清晰的代码。随着学习的深入。博主会坚持以实例巩固学习的方法。希望大家喜欢。好了。如今让我们開始今天的内容,尾随博主一起走进NGUI的世界吧。

首先,我们对于NGUI要有一个定位。NGUI是用来做界面的,NGUI支持2D/3D的界面。我们在前面的文章中学习过2D插件2DToolKit,尽管2DToolKit相同能够实现2D界面,可是NGUI专注于界面元素、2DToolKit专注于游戏元素,因此两者在使用的时候存在一定的差异。当然,二者能够混合使用,这些都是后话啦。好了,我们正式開始吧。首先,我们导入NGUI的资源包。这时在项目窗体中会添加一个NGUI的文件夹。好了,做好准备工作后,我们先来了解下NGUI中的基础知识。

1、Atlas

Atlas在NGUI是一组资源的集合,假设大家熟悉2DToolkit的话。一定知道在2DToolKit中有一个被称为SpriteCollection的概念。

SpriteCollection被称为精灵组合,我们在2D游戏场景中使用的一个元素被称为Sprite。即精灵。

SpriteCollection实际上是一个Prefab,在这个Prefab中定义了我们的所有精灵素材,我们能够依据精灵的名称来使用某一个精灵。那么在NGUI中,Atlas就是这样一个精灵集合,在这个精灵集合中定义着我们要使用的精灵元素。换句话说,在NGUI中使用精灵元素首先就要创建一个Atlas。

在NGUI中我们能够通过内置的 Atlas工具来创建Atlas。

2、Font

Font即字体,主要用来控制界面中文本的样式。在NGUI中,我们须要通过NGUI内置的字体工具来制作自己定义字体。这样我们就能在Unity3D中实现不同风格的游戏界面。

3、UI Root

NGUI使用NGUI作为场景元素的根节点,在该节点下有一个用于显示场景的摄像机、一个用于控制控件位置的Anchor锚节点,在该锚节点下有一个用于盛放UI元素的容器节点Panel,我们今后创建的所有控件都将作为Plane的子节点。了解这一点对于我们兴许的学习非常有帮助。

好了。了解完基本知识后。如今我们開始做一个简单的界面。终于的效果如图所看到的:

今天是我们第一次学习NGUI,所以博主选择了一个相对简单的界面。首先我们准备以下的素材:

接下来,我们将素材图片导入Unity3D中,然后我们在Unity3D项目窗体中选中我们的素材文件,依次选择NGUI->Atlas Maker。

接下来,会打开精灵集合制作窗体:

假设此时项目中已经有创建好的Atlas,那么会提示替换或者选择一个Atlas,否则默认是Create一个Atlas。这里我们就替换吧,能够看到在以下的列表中加入了我们选中的精灵素材。

我们这里选择替换后,会发如今Unity3D的项目文件夹(在素材文件的文件夹下)生成了以下几个文件:

当中,TextureAltas.mat是一个材质文件、TextureAltas.png是一个将精灵图片显示在一张图中的图片、TextureAtlas.prefab是一个预设文件。好了,了解完NGUI怎么创建精灵以及NGUI详细做了什么之后,我们能够開始今天的界面构建了。首先我们选择NGUI->Create a Widget创建一个控件:

在接下来的窗体中,我们选择Sprite类型来创建一个精灵:

再创建好精灵之后,我们就能够为精灵指定素材了,如图:

我们指定这两张图片作为我们的背景,命名为BlackSprite,调整到合适的大小。相似地,我们创建头部的标题背景,命名为HeaderSprite。好了,接下来我们来说说字体吧,我们首先从Windows/Fonts中复制一个字体并将其导入到Unity3D中,在Unity3D中会生成三个文件,字体文件、字体文本文件、字体着色器。好了,接下来我们使用NGUI->Font Maker来制作字体:

和生成Atlas精灵一样。我们依照自己的须要来生成字体。接下来。我们使用创建Sprite的方法创建一个Label。将字体设置为我们创建的字体。我们仅仅须要将控件的模本设置为Label就能够了。我们为头部的标题背景图片加上一个Label,使其显示战斗奖励的字样,最后将其拖放到HeaderSprite对象下,使其成为它的子控件。相似地。我们创建一个Buttonbutton。并为其加入一个Label显示OK。此时场景布局如图所看到的:

好了,最后来一起看看效果吧。

当然。眼下游戏界面中的元素都不能和用户交互,由于我们还没有为控件编写脚本,在下一篇文章中,我们将继续探索NGUI。希望大家关注我的博客,好啦,今天的内容就是这样啦。

每日箴言:如今不是去想缺少什么的时候,该想一想凭现有的东西你能做什么。——海明威《老人与海》

喜欢我的博客请记住我的名字:秦元培。我的博客地址是blog.csdn.net/qinyuanpei
     转载请注明出处,本文作者:秦元培,本文出处:http://blog.csdn.net/qinyuanpei/article/details/25339875

版权声明:本文博客原创文章,博客,未经同意,不得转载。转载请注明出处和作者,谢谢!

[Unity3D]Unity3D发展偷看游戏初期阶段NGUI的更多相关文章

  1. 解决unity3d发布的网页游戏放到服务器上无法使用的问题

    http://www.unity蛮牛.com/blog-2429-1226.html 第一次把unity3d发布的网页游戏放到服务器上(Win2003),发现无法使用.可以尝试以下办法.       ...

  2. [Unity3D]Unity3D持久性数据的游戏开发PlayerPrefs采用

    大家好,我是秦培,欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 博主今天研究了在Unity3D中的数据持久化问题.数据持久化在不论什么一个开发领 ...

  3. [Unity3D]Unity3D游戏开发之飞机大战项目解说

    大家好,我是秦元培,欢迎大家继续关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei. 首先感谢大家对我博客的关注,今天我想和大家分享的是一个飞机大战的项目.这是一个比較综合的 ...

  4. 【坦克大战】Unity3D多人在线游戏(泰课的坦克大战--旋转的螺丝钉)

    [坦克大战]Unity3D多人在线游戏 http://www.taikr.com/my/course/937 1.NetworkManager的介绍: 说明:选择固定生成时会自动寻找有StartPos ...

  5. Unity3D实现3D立体游戏原理及过程

    Unity3D实现3D立体游戏原理及过程 183 0 0     下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理.     理论上,每个普通的非立体3 ...

  6. [Unity3D]Unity3D圣骑士模仿游戏开发传仙灵达到当局岛

    大家好,我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 在前面的文章中.我们分别实现了一个自己定义的角色控制器<[Unity3D]Unity3D游戏开 ...

  7. 【Unity3D游戏开发】NGUI之多分辨率下完美分布式协同开发 (五)

    NGUI多分辨率下完美分布式协同开发:不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 NGUI多分辨率下完美分布式协同开发不同分辨率下相对于屏幕坐标的Perfab数据不再丢失 开发问题 原因分析 ...

  8. 【Unity3D游戏开发】NGUI之DrawCall数量 (四)

    看了非常多关于NGUI drawCall的文章.见得比較多的一个观点是:一个 Atlas 相应一个Drawcall. 但事实上NGUI内部有自己的一套对DrawCall的处理规则. 相关的规则有: 1 ...

  9. [Unity3D]上海某大型游戏公司的基础面试题

    一个小老乡跟我聊到去上海某大公司的基础面试题,面试结果不尽如人意,但还是分享了下面试的试题,刚刚第一次录制视频,给某人讲课,我感觉讲的还算比较耐心,但发现一些新手入门学习的弊端,可能是很普遍的现象,这 ...

随机推荐

  1. Python 内置函数 range的使用

    内置range函数可以用来方便的产生等差的数值序列.如: >>> range(5) [0, 1, 2, 3, 4] >>> range(1,5) [1, 2, 3, ...

  2. lucene 索引查看工具

    luke 是 lucene 索引查看工具,基于 swing 开发的,是 lucene.solr.nutch 开发过程中不可或缺的工具.在测试搜索过程,进程出现搜不到东西或者搜到的东西不是想要的结果时, ...

  3. 【每日一摩斯】-Shared Pool优化和Library Cache Latch冲突优化 (1523934.1)-系列3

    减轻Shared Pool负载 Parse一次并执行多次        在OLTP类型的应用中,最好的方法是只让一个语句被解析一次,然后保持这个cursor的打开状态,在需要的时候重复执行它.这样做的 ...

  4. 基于visual Studio2013解决C语言竞赛题之0416完数

       题目 解决代码及点评 完数的解决方案依旧是遍历,然后写出判断完数的函数进行处理 /************************************************** ...

  5. 【转载】CentOS日志系统组成详解

    日志系统有三部分组成:一.使用什么工具记录系统产生的日志信息?      syslog服务脚本管理的两个进程: syslogd.klogd 来记录系统产生的日志信息:      klogd     进 ...

  6. 我的Python成长之路---第一天---Python基础(作业1:登录验证)---2015年12月26日(雾霾)

    作业一:编写登录接口 输入用户名密码 认证成功系那是欢迎信息 输错三次后锁定 思路: 1.参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则 1)认证流程参考的是Lin ...

  7. NSStringDrawingOptions

    如果options参数为NSStringDrawingUsesLineFragmentOrigin,那么整个文本将以每行组成的矩形为单位计算整个文本的尺寸.(在这里有点奇怪,因为字体高度大概是13.8 ...

  8. 玩转Windows服务系列汇总(9篇文章)

    玩转Windows服务系列汇总 创建Windows服务Debug.Release版本的注册和卸载及其原理无COM接口Windows服务启动失败原因及解决方案服务运行.停止流程浅析Windows服务小技 ...

  9. Java Arrays Tutorial (3)

    Java Arrays Tutorial (3) Data types have a specific set of values. A byte cannot hold a value larger ...

  10. 为什么函数式编程在Java中很危险?

    摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Ell ...