Unity3D学习笔记之三Prefab组件的使用

本次教程,我们来创建一个简单的Prefab组件。

教程参考自人人素材翻译组出品的翻译教程《Unity游戏引擎的基础入门视频教程》。

说到Prefab,中文翻译为预设体,在Unity官方的书本《Unity4.X从入门到精通》中的解释是:可以理解为是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用。相同的对象可以通过一个预设体来创建,此过程可理解为实例化。

存储在项目文件中(Project视图)的状态时,预设体作为一个资源,可应用在一个项目中的不同场景中。当拖动预设体到场景中就会创建一个实例。该实例与其原始预设体的有关联的,对预设体进行更改,实例会同步修改。Prefab可以提升资源的利用率和开发的效率。

好比某个Prefab是我们创建好的一个标准的房间模型,当我们在场景中需要建立另一个房间的时候,不需要我们再手动的将地板,墙,天花板拼接,而是可以直接拖一个Prefab到Scene视图中,并对这个Prefab进行修改就可以了。

下面开始创建我们的Prefab组件。接上一篇教程,现在我们场景内,有三个没有吻合的模型。如下图:

接下来我们把分别单击选中这三部分,并在Inspector视图中,找到Position,将他们的XYZ坐标都修改为0,0,0,

我们会发现模型会变为下图这样。

我们发现MineShaft_Wall中心在墙的中间,所以我们要修改下他的Y坐标。选中墙壁模型,将MineShaft_Wall墙壁模

型的Y坐标改为3就可以了,事实上这个模型墙壁高度为6个单位。

这里要注意一下,如果你要单方向移动一个模型,即保持其他两个坐标值不变只改变一个坐标值,那么你就要按

住坐标系三个方向其中的一个并拖动就可以了。

接下来我们要做的是把现在位于中间的墙壁,移动到一侧,并复制几面墙移动到四周。直接拖动或者修改坐标可能

会产生各种误差,这里我们采用顶点捕捉(Vertex Snapping)。

我们首先选中我们要移动的物体,然后按下V,我们会发现当我们移动鼠标的时候坐标轴会只在模型中的顶点

停留。如下图,当你们鼠标挪到左下角的时候,会在左下方的定点出现坐标轴。

这时我们可以单击鼠标,选中这个顶点坐标轴处的正方形区域(如图中的黄色小正方形),拖动这个模型,可以让

这个顶点与下面我们鼠标挪到的另一个顶点结合。如下图,我选中这个顶点后,将其拖动至地板左下角的顶点上,

让这两个顶点相合。这是一个快捷的移动模型的方法。

接下来我们要借用这一面墙复制出另一面墙,并移动位置。我们选中我们刚移动的这面墙体,按下Ctrl+D(Mac下为

Command+D)来复制一下,我们会在Hierarchy视图下发现多了一个MineShaft_Wall,然后我们采取刚才同样的方

法,按下V,选取墙体的左下角坐标轴,拖到地板的右下角顶点,我们刚才复制的墙体就到已有墙体的对面。但是

我们前面提到过,我们的墙体不从正面看是看不到的,平移后我们相当于看到的是墙体的另一面,所以这里才会只

有一个坐标系而没有墙。如果我们稍微向右再挪动一点儿视角,就会看到我们复制出来的这面墙。

如下图:

图一:未挪动视角

图二:挪动视角

我们要做的是把这面墙体旋转180度。选中这面墙,按下E,激活Rotate工具,坐标轴会发生如下变化:

这里我们按住绿色线确保Y轴角度不便,然后按住CTRL(Mac下按住Command)逆时针方向一直拖动,按住CTRL

是以15度为单位来旋转,旋转后我们会发现Inspector视图中,Y角度变成了-180(有时会是179.99),当然也可以

直接在Inspector视图额Rotation里面直接修改角度,要确保你修改的坐标轴是正确的。旋转完成后按W回归原始坐

标系。

现在我们开始将这个模型放入一个Prefab组件中。先在Project视图内,ImportedAssets文件夹内新建Prefabs文件

夹,专门用来放置我们的预设体。

然后进入Prefabs文件夹,右键,Create,Prefab,将新建的空的Prefab命名为PFB_Straight。

下面我们将视线移动到Hierarchy视图中,我们可以看到四个蓝色名称,蓝色名称表明该物体是预设体或者从文件中

拖入到场景内的。现在要把物体放入Prefab中,我们可以发现当这些物体全部选中后是无法拖进我们新建的Prefab

中的。这里我们需要在Hierarchy中创建一个空的游戏物体------菜单栏,GameObject,Create Empty,这样Hierarchy

中会多出一个空的GameObject。我们对其命名为PFB_Straight,没错,和我们的Prefab名字相对应,并且现在这个

object的名称是白色的。下面我们来为此object与我们的四个物体建立父子关系,并将其导入到Prefab中。

选中全部四个物体,然后拖动到PFB_Straight中,会形成如图一的父子关系,接下来选中PFB_Straight,并拖入到

Project视图中我们新建的Prefab中,就完成了Prefab的初步创建,如图二。

图二中,Hierarchy中物体全部变为蓝色,而且我们的Prefab在界面右下角有了预览,我们可以在预览中用鼠标

拖动来查看Prefab的内容。

图一:

图二:

至此,一个很简单的Prefab就创建好了,下面我们将这个组件拖入到场景中,我们会发现我们已经可以将我们之前

创建的组件很简单的假如场景中。这就是Prefab的优点,大大提高了工作的效率。

我们现在可以选中一个组件,按住V,并利用前面提到过的顶点捕捉(Vertex Snapping)来建立一个长长的隧道。

注意要选中整个组件,而不是组件的一部分,不要只把地板或者墙壁移动了,如果移动错了,记得按CTRL

(Command)+Z来取消操作。大家可以来试试创建一个隧道。

2014.1.1     0:03

By Mr.Losers

时间: 2024-12-11 15:49:53

Unity3D学习笔记之三Prefab组件的使用的相关文章

bootstrap学习笔记之三(组件的使用)

bootstrap组件需要引入bootstrap.js才行,当然要引入bootstrap.js首先得引入JQuery. 一.下拉菜单 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了position:relative 的元素.原因是dropdown-menu元素设定了position:absolute,且top:100%: left: 0:所以需要包裹在设定了position:relative的元素内. 1 .dropup, 2 .dropdown { 3 posit

Citrix XenMobile学习笔记之三:MAM移动应用管理(Mobility Application Management)

产品简介 思杰(Citrix)在其全面的企业移动解决方案中提供了企业级移动应用管理(MAM)功能.XenMobile MAM 版由CloudGateway发展而来.CloudGateway是思杰进入MAM的跳板.该产品的所有功能在XenMobile的MAM版中都有,现在叫做App版,思杰还有带有完整功能的企业版.XenMobile的移动应用管理组件运行在iOS.安卓.Windows.Windows Phone.Mac OS X.黑莓甚至塞班上.XenMobile支持iOS与安卓上的原生应用.MA

unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条

原地址:http://blog.csdn.net/lzhq1982/article/details/18793479 本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/18793479 先上张图,自己做的一个demo. 这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的. 第一步,先在UI Root里制作头像和血条. 这个制作步骤基

《Hibernate学习笔记之三》:联合主键的映射

<Hibernate学习笔记之三>:联合主键的映射 就如在前面所举的例子一样,是使用的id作为唯一的主键,一般情况下我们也只使用唯一的一个属性作为主键,但是在实际中,我们可能会遇到几个属性作为主键的情况,因此,在本篇博文中,就来介绍下,联合主键的映射关系应该如何来做?? 联合主键的映射有两种方式来进行实现. 1.使用映射文件 XXX.bhm.xml 2.使用Annotation Hibernate首先需要使用联合主键的实体类必须实现Serializable接口,即为了使序列能够被序列化进行传输

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue学习笔记入门篇——组件的通讯

本文为转载,原文:Vue学习笔记入门篇--组件的通讯 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B.它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件.然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的.这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅提高了组件的可维护性和可重用性.在 Vue 中,父子组件的关系可以总结为 props down, events up.父组件通过 props 向下传递

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

Unity3d 学习笔记(-) Monobehaviour

从今天起开始正式学习Unity3d!!!! 下面记录Monobehaviour相关内容. Monobehaviour执行顺序,图示很清晰,简单明了,可以通过此图洞悉协程(coroutine)的运行机制. Unity3d 学习笔记(-) Monobehaviour