熟悉Flash的朋友对“元件”这个概念一定不会陌生,想像一下如果要制作一个漫天飞雪的视觉效果,比较合适的思路是预先制作几种雪花的元件,然后在场景里随机摆放。那为什么不使用复制呢?因为一旦需要修改某个雪花的造型,我们就必须对每个以它为模版克隆出来的雪花进行修改,这工作量是枯燥而巨大的。

在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编辑器“真正”的运行起来

Unity3D学习笔记(十二)预制相关推荐

  1. 吴恩达《机器学习》学习笔记十二——机器学习系统

    吴恩达<机器学习>学习笔记十二--机器学习系统 一.设计机器学习系统的思想 1.快速实现+绘制学习曲线--寻找重点优化的方向 2.误差分析 3.数值估计 二.偏斜类问题(类别不均衡) 三. ...

  2. ROS学习笔记十二:使用roswtf

    ROS学习笔记十二:使用roswtf 在使用ROS过程中,roswtf工具可以为我们提供ROS系统是否正常工作的检查作用. 注意:在进行下列操作之前,请确保roscore没有运行. 检查ROS是否安装 ...

  3. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  4. Polyworks脚本开发学习笔记(十二)-输出和读取文本文件

    Polyworks脚本开发学习笔记(十二)-输出和读取文本文件 Polyworks作为一个测量工具,将测量的数据方便的导出到文本文件则是一项必须的功能.在DATA_FILE这个命令下提供了很多子命令用 ...

  5. OpenCV学习笔记(十二)——图像分割与提取

    在图像处理的过程中,经常需要从图像中将前景对象作为目标图像分割或者提取出来.例如,在视频监控中,观测到的是固定背景下的视频内容,而我们对背景本身并无兴趣,感兴趣的是背景中出现的车辆.行人或者其他对象. ...

  6. 【现代机器人学】学习笔记十二:轮式移动机器人

    目录 轮式机器人类型 全向轮式机器人 建模 单个全向轮是怎么运动的 多个全向轮是如何带动底盘运动的 运动规划和反馈控制 非完整约束轮式移动机器人 建模 独轮车 差速驱动机器人 车型机器人 非完整移动机 ...

  7. Unity3D学习笔记(二、小球滚动吃金币)

    源码:键盘方向键操作小球滚动吃金币Unity3D源码 下篇:Unity3D学习笔记(三.小球跑酷) 一.颜色材质球创建  二.Plane平板创建 三.围墙 同理二,新建Cube,并调整属性,设立围墙 ...

  8. 【theano-windows】学习笔记十二——卷积神经网络

    前言 按照进度, 学习theano中的卷积操作 国际惯例, 来一波参考网址 Convolutional Neural Networks (LeNet) 卷积神经网络如何应用在彩色图像上? 卷积小知识 ...

  9. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 变量的地址就是指针,存放指针的变量就是指针变量(因而又叫作地址变量 address variable); 这个地址编号本身就是一个无符号的整数,在32位系统下为4字节(8位 ...

  10. Vue.js 学习笔记 十二 Vue发起Ajax请求

    首先需要导入vue-resource.js,可以自己下载引入,也可以通过Nuget下载,它依赖于Vue.js. 全局使用方式: Vue.http.get(url,[options]).then(suc ...

最新文章

  1. .substr()在字符串每个字母前面加上一个1
  2. IT员工的“脑出血”
  3. 刚刚,马斯克再次创造航天历史!SpaceX首次载人发射任务成功
  4. C++ transform 浅析
  5. Windows内存管理 - 隐藏在new和malloc背后的heap
  6. http,session,cookie
  7. uC/OS-II源码分析(总体思路一)(
  8. mall整合RabbitMQ实现延迟消息
  9. (七)Netty与零拷贝
  10. Oracle删除当前用户下的所有表、视图、序列、函数、存储过程、包
  11. hdu2571动态规划
  12. 应用程序热补丁(三):完整的设计与实现
  13. 千图/千库/我图网/觅元素,终身会员来了!设计师的福利日!视觉运营室
  14. PLSQL注册码(永久可用)
  15. Vue中图片裁剪的实现
  16. sap se06和scc4
  17. JumpServer配置邮件服务
  18. 搭建 lepus 监控
  19. 图像的二维频谱图的理解 20170622
  20. 【排列问题】-全排列

热门文章

  1. ADB安装电视应用市场
  2. Oracle 11g RAC 修改服务器各类ip地址【转载】
  3. 如何在Windows server 2012中设置文件夹共享和访问
  4. 单位dB(分贝)的含义和好处,dBm(dBmW 分贝毫瓦)的含义 dB的含义
  5. JavaSE IO流 Vol.2 节点流 - 输入流 入门
  6. 微信小程序入门笔记(一)
  7. java内部窗口无法实现,java 既不是内部命令也不是外部命令的解决办法
  8. 无法解析该名称 outlook必须处于联机,控制面板删除账户
  9. lisp 非对称缓和曲线_利用AutoLISP语言绘制带缓和曲线的铁路曲线平面图
  10. Redis笔记(Linux部署redis过程)