Unity3D学习笔记(十二)预制
来源:互联网 发布:机械杆做丝安全数据 编辑:程序博客网 时间:2024/05/16 02:39
熟悉Flash的朋友对“元件”这个概念一定不会陌生,想像一下如果要制作一个漫天飞雪的视觉效果,比较合适的思路是预先制作几种雪花的元件,然后在场景里随机摆放。那为什么不使用复制呢?因为一旦需要修改某个雪花的造型,我们就必须对每个以它为模版克隆出来的雪花进行修改,这工作量是枯燥而巨大的。
在Unity中元件的概念叫做预制(Prefab),其实在一开始做联系的时候就接触过了。不论是导入自定义模型,还是使用Unity自带的第一人称控制器,它们其实都是预制。识别预制的方式很简单,在工程面板中左边有一个蓝色立方体就代表这个资源是预制。如果需要使用它,我们可以轻车熟路地把它拖动到设计场景中,而且可以拖放任意个对象。
拖入到设计场景中的预制对象会显示在层次列表中,并且字体是蓝色的。我们把这些对象叫做预制的实例(Instance),所有实例的属性都引用自它的预设,当预设的属性改变时,对应的实例属性也会相应改变。
在练习的过程中我发现,实例的属性并不是百分百就和预设完全一致。当修改实例的某个属性后,如将Transform的Scale属性更改为两倍缩放,预设的属性并不会改变,并且也不会影响到该预设的其他实例。此时如果再修改预设的Scale属性,修改过的实例是不会跟着预设一起缩放的(其他没更改过的预设就会随着预设一起缩放)。
所以可以有这么个结论,当实例的某个属性被设定过后,即使修改预设该属性也不会变动;若实例的属性没有被设置过,那么修改预设后实例就会跟着预设一起变。
另外当选中实例时,检视面板上就会显示预制对象菜单:
下边是我在《火炬之光》中丢的满地的药水,结合预制的知识,实现这种效果是不是会很轻松呢?整理一下思路其实的确是很简单的,只要创建药瓶的模型并设置为预制(还要再加上点粒子特效),然后丢N个到设计场景中,随意修改每个药瓶的角度即可。
当然在真正的游戏设计中,这些工作都可以通过脚本实现——废话嘛,不可能击杀完怪物一爆装备,设计师就拖几个预制道具到我们的电脑里。实际上脚本也是一个组件,在今后的笔记中我会慢慢把这些知识点都补充上去,直到实现一个能玩的小游戏:)
由于手头上没有药水的模型,就偷懒用苹果来代替一下吧,反正在一般游戏的设定中苹果也是能起到一点回复作用的嘛,哈哈。另外图中那个闪烁的星星贴图咱也没有,在魔兽世界中一下子也找不到那个拾取的模型,就只能自己动手用Photoshop制作一个了。有句话说的好,那啥,不会美术的程序不是好策划@_@。
说干就干,先在工程面板中点击右键,在弹出的菜单中创建Prefab,并取名为Apple。此时的Apple的图标还是白色立方体,表示这个预制还是空的。我们可以把导入的苹果模型拖动到这个预制资源上,图标就会变成蓝色立方体。另外我们希望物品能够“掉落”在地上,而不是悬浮在空中,所以还需要为这个预制增加刚体组件和球形碰撞器,并勾选使用重力。
接着再按照之前的笔记轻车熟路地为预制添加三大粒子系统要素,粒子发射器、粒子动画器、粒子渲染器,调整一下参数,一个苹果的预制就创建好了。有了素材之后只要往设计视图里拖就行了,爱拖几个拖几个,反正它们都会自带漂浮的星星效果。如果哪天策划改需求了,要把星星换成笑脸什么的,只要改动预制的Apple就好啦。是不是很方便呢?
下面就是制作完毕的效果图了,貌似苹果少了点……不过达到目的就行了,预制就是这么强大,可以说在Unity中最常用的功能之一就是预制了吧。
噢,在结束本篇笔记之前还要提一个知识点,那就是对象和子对象的关系。点开层次面板中的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)。此时如果点击确认的话,则这个对象将会成为一个独立对象,犹如复制一个新的对象,与预制没有任何关系了。
本篇笔记到这里就结束了,下一章我会写写如何导出一个游戏项目,让游戏脱离Unity编辑器“真正”的运行起来
在Unity中元件的概念叫做预制(Prefab),其实在一开始做联系的时候就接触过了。不论是导入自定义模型,还是使用Unity自带的第一人称控制器,它们其实都是预制。识别预制的方式很简单,在工程面板中左边有一个蓝色立方体就代表这个资源是预制。如果需要使用它,我们可以轻车熟路地把它拖动到设计场景中,而且可以拖放任意个对象。
拖入到设计场景中的预制对象会显示在层次列表中,并且字体是蓝色的。我们把这些对象叫做预制的实例(Instance),所有实例的属性都引用自它的预设,当预设的属性改变时,对应的实例属性也会相应改变。
在练习的过程中我发现,实例的属性并不是百分百就和预设完全一致。当修改实例的某个属性后,如将Transform的Scale属性更改为两倍缩放,预设的属性并不会改变,并且也不会影响到该预设的其他实例。此时如果再修改预设的Scale属性,修改过的实例是不会跟着预设一起缩放的(其他没更改过的预设就会随着预设一起缩放)。
所以可以有这么个结论,当实例的某个属性被设定过后,即使修改预设该属性也不会变动;若实例的属性没有被设置过,那么修改预设后实例就会跟着预设一起变。
另外当选中实例时,检视面板上就会显示预制对象菜单:
- Select:在工程面板中快速选取该实例引用的预制;
- Revert:将实例修改过的参数全部还原为预制的参数;
- Apply:将实例修改过的参数全部应用到预制,此时所有引用此预制的实例会一起受到影响而变动。
下边是我在《火炬之光》中丢的满地的药水,结合预制的知识,实现这种效果是不是会很轻松呢?整理一下思路其实的确是很简单的,只要创建药瓶的模型并设置为预制(还要再加上点粒子特效),然后丢N个到设计场景中,随意修改每个药瓶的角度即可。
当然在真正的游戏设计中,这些工作都可以通过脚本实现——废话嘛,不可能击杀完怪物一爆装备,设计师就拖几个预制道具到我们的电脑里。实际上脚本也是一个组件,在今后的笔记中我会慢慢把这些知识点都补充上去,直到实现一个能玩的小游戏:)
由于手头上没有药水的模型,就偷懒用苹果来代替一下吧,反正在一般游戏的设定中苹果也是能起到一点回复作用的嘛,哈哈。另外图中那个闪烁的星星贴图咱也没有,在魔兽世界中一下子也找不到那个拾取的模型,就只能自己动手用Photoshop制作一个了。有句话说的好,那啥,不会美术的程序不是好策划@_@。
说干就干,先在工程面板中点击右键,在弹出的菜单中创建Prefab,并取名为Apple。此时的Apple的图标还是白色立方体,表示这个预制还是空的。我们可以把导入的苹果模型拖动到这个预制资源上,图标就会变成蓝色立方体。另外我们希望物品能够“掉落”在地上,而不是悬浮在空中,所以还需要为这个预制增加刚体组件和球形碰撞器,并勾选使用重力。
接着再按照之前的笔记轻车熟路地为预制添加三大粒子系统要素,粒子发射器、粒子动画器、粒子渲染器,调整一下参数,一个苹果的预制就创建好了。有了素材之后只要往设计视图里拖就行了,爱拖几个拖几个,反正它们都会自带漂浮的星星效果。如果哪天策划改需求了,要把星星换成笑脸什么的,只要改动预制的Apple就好啦。是不是很方便呢?
下面就是制作完毕的效果图了,貌似苹果少了点……不过达到目的就行了,预制就是这么强大,可以说在Unity中最常用的功能之一就是预制了吧。
噢,在结束本篇笔记之前还要提一个知识点,那就是对象和子对象的关系。点开层次面板中的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)。此时如果点击确认的话,则这个对象将会成为一个独立对象,犹如复制一个新的对象,与预制没有任何关系了。
本篇笔记到这里就结束了,下一章我会写写如何导出一个游戏项目,让游戏脱离Unity编辑器“真正”的运行起来
0 0
- Unity3D学习笔记(十二)预制
- Unity3D学习笔记(十二)预制
- Unity3d 5.x 学习笔记(3)—— 发射预制体子弹(Instantiate),点射,扫射,五连发效果
- unity3d学习笔记(十二)--刀光剑影的制作
- unity3d学习笔记(十二)--刀光剑影的制作
- Unity3D学习笔记(二十二)模仿WOW镜头操作
- 学习笔记(十二)
- unity3d 预制体
- UNITY3D自学(四)--创建预制体Prefab--第一集
- Unity3D之入门 (灯光 材质 预制体)
- java学习笔记(十二)
- Hibernate学习笔记(十二)
- Linux学习笔记(十二)
- 学习笔记(二十二)
- Linux学习笔记(十二)
- Java学习笔记(十二)
- Java学习笔记(十二)
- JOS学习笔记(十二)
- 如何用抓包工具在模拟器与服务器之间抓包
- fork之pid理解
- 互联网+人人都能看懂的互联网+转型攻略(读书笔记)
- oracle 权限与角色查询语句
- 23.UITableView如何改变contentSize
- Unity3D学习笔记(十二)预制
- iOS 适配固定边距内容拉伸
- Java Reflection(二):Classes
- behemoth - 05
- 自定义属性--索引值
- 深入浅出 React Native:使用 JavaScript 构建原生应用
- 汉诺塔算法
- bat处理程序中定时关闭批处理启动的应用程序
- 消息队列 Kafka学习