Unity3D学习笔记(十二)预制

来源:互联网 发布:机械杆做丝安全数据 编辑:程序博客网 时间:2024/05/16 02:39
熟悉Flash的朋友对“元件”这个概念一定不会陌生,想像一下如果要制作一个漫天飞雪的视觉效果,比较合适的思路是预先制作几种雪花的元件,然后在场景里随机摆放。那为什么不使用复制呢?因为一旦需要修改某个雪花的造型,我们就必须对每个以它为模版克隆出来的雪花进行修改,这工作量是枯燥而巨大的。

在Unity中元件的概念叫做预制(Prefab),其实在一开始做联系的时候就接触过了。不论是导入自定义模型,还是使用Unity自带的第一人称控制器,它们其实都是预制。识别预制的方式很简单,在工程面板中左边有一个蓝色立方体就代表这个资源是预制。如果需要使用它,我们可以轻车熟路地把它拖动到设计场景中,而且可以拖放任意个对象。

拖入到设计场景中的预制对象会显示在层次列表中,并且字体是蓝色的。我们把这些对象叫做预制的实例(Instance),所有实例的属性都引用自它的预设,当预设的属性改变时,对应的实例属性也会相应改变。

img?s=870nNUzoZ&l=y.jpg 

在练习的过程中我发现,实例的属性并不是百分百就和预设完全一致。当修改实例的某个属性后,如将Transform的Scale属性更改为两倍缩放,预设的属性并不会改变,并且也不会影响到该预设的其他实例。此时如果再修改预设的Scale属性,修改过的实例是不会跟着预设一起缩放的(其他没更改过的预设就会随着预设一起缩放)。

所以可以有这么个结论,当实例的某个属性被设定过后,即使修改预设该属性也不会变动;若实例的属性没有被设置过,那么修改预设后实例就会跟着预设一起变。

另外当选中实例时,检视面板上就会显示预制对象菜单:


  • Select:在工程面板中快速选取该实例引用的预制;
  • Revert:将实例修改过的参数全部还原为预制的参数;
  • Apply:将实例修改过的参数全部应用到预制,此时所有引用此预制的实例会一起受到影响而变动。

下边是我在《火炬之光》中丢的满地的药水,结合预制的知识,实现这种效果是不是会很轻松呢?整理一下思路其实的确是很简单的,只要创建药瓶的模型并设置为预制(还要再加上点粒子特效),然后丢N个到设计场景中,随意修改每个药瓶的角度即可。

img?s=LwPfry8Ls&l=y.jpg 

当然在真正的游戏设计中,这些工作都可以通过脚本实现——废话嘛,不可能击杀完怪物一爆装备,设计师就拖几个预制道具到我们的电脑里。实际上脚本也是一个组件,在今后的笔记中我会慢慢把这些知识点都补充上去,直到实现一个能玩的小游戏:)

由于手头上没有药水的模型,就偷懒用苹果来代替一下吧,反正在一般游戏的设定中苹果也是能起到一点回复作用的嘛,哈哈。另外图中那个闪烁的星星贴图咱也没有,在魔兽世界中一下子也找不到那个拾取的模型,就只能自己动手用Photoshop制作一个了。有句话说的好,那啥,不会美术的程序不是好策划@_@。

说干就干,先在工程面板中点击右键,在弹出的菜单中创建Prefab,并取名为Apple。此时的Apple的图标还是白色立方体,表示这个预制还是空的。我们可以把导入的苹果模型拖动到这个预制资源上,图标就会变成蓝色立方体。另外我们希望物品能够“掉落”在地上,而不是悬浮在空中,所以还需要为这个预制增加刚体组件和球形碰撞器,并勾选使用重力。

img?s=qxtN4K3UA&l=y.jpg 

接着再按照之前的笔记轻车熟路地为预制添加三大粒子系统要素,粒子发射器、粒子动画器、粒子渲染器,调整一下参数,一个苹果的预制就创建好了。有了素材之后只要往设计视图里拖就行了,爱拖几个拖几个,反正它们都会自带漂浮的星星效果。如果哪天策划改需求了,要把星星换成笑脸什么的,只要改动预制的Apple就好啦。是不是很方便呢?

下面就是制作完毕的效果图了,貌似苹果少了点……不过达到目的就行了,预制就是这么强大,可以说在Unity中最常用的功能之一就是预制了吧。

img?s=IdfSHEpEe&l=y.jpg 

噢,在结束本篇笔记之前还要提一个知识点,那就是对象和子对象的关系。点开层次面板中的First Person Controller,会出现Graphics和Main Camera,它们就是First Person Controller的子对象。而First Person Controller则称为Graphics和Main Camera的父对象。用鼠标可以直接把一个对象拖到另外一个对象上,让它们建立父子关系,也可以把子对象拖到上一级别脱离父子关系(汗,这怎么有点好像TVB剧情)。

成为子对象的Transform都是相对于其父对象的,比如父对象的坐标是(100,100,100),子对象的本地坐标是(10,10,10),那么子对象的世界坐标就是(100+10,100+10,100+10),缩放和旋转同理。

如果试图把一个预制的子对象脱离父子关系,则会像下图中一样,弹出一个“断开预制连接”的警告框(我正尝试将Graphics拖出First Person Controller)。此时如果点击确认的话,则这个对象将会成为一个独立对象,犹如复制一个新的对象,与预制没有任何关系了。

img?s=DvIhsJzDk&l=y.jpg 

本篇笔记到这里就结束了,下一章我会写写如何导出一个游戏项目,让游戏脱离Unity编辑器“真正”的运行起来
0 0
原创粉丝点击