prefab概念:
prefab是一种资源类型——存储在项目视图中的一种可反复使用的游戏对象。因而当游戏中须要非常多反复使用的对象、资源等时,prefab就有了用武之地。它拥有下面特点:
• 能够放到多个场景中。也能够在同一个场景中放置多次
• 当加入一个prefab到场景中,就创建了它的一个实例
• 全部的prefab实例链接到原始prefab,本质上是原始prefab的克隆。
• 不论项目中存在多少实例。仅仅要对prefab进行了改动。全部prefab实例都将随之发生变化。
创建填充prefab
为了创建一个prefab。必须使用菜单构造一个新的空白prefab。不包括游戏对象,因而不能创建它的一个实例。
此时这个新的prefab像一个空的container,想要使用它。必须用游戏对象的数据来填充它,让它不空。创建方法为project视图中create-》prefab(或导航菜单条assets-》create-》prefab),此时能够看到project视图多了个灰色的小立方体,它就是创建的prefab。
填充prefab非常easy。仅仅须要在hierarchy视图中选择要成为prefab的游戏对象,然后拖动该对象到刚才创建的prefab上就可以。此时能够看见灰色的小立方体变成蓝色了。此时。游戏对象和其全部子对象就已经拷贝到了prefab的数据中,该prefab能够在多个实例中反复使用。而hierarchy视图中的原始游戏对象已经成为了该prefab的一个实例。
假设选择了一个prefab实例,并希望做能够影响全部实例的变化,点击inspector中的selectbutton选择源prefab。
脚本实例化prefab(执行时实例化prefab)
在执行时,通过prefab实例化复杂的游戏物体是非常方便的。实例化prefab的替代方法就是从一开始就使用代码来创建游戏物体。而实例化prefab比替代方法有非常多优势:
○ 能够用一行代码来实例化一个具有所有同样功能的prefab。而用代码创建等效的游戏对象却要花费平均5行代码但可能很多其它。
○ 能够非常easy地在scene和inspector视图中高速建立、测试和改动prefab。
○ 能够改动实例化的prefab却不须要改变实例化它的代码。
比如,一个简单的火箭可被改动为超级火箭,却不须要改动不论什么代码。
unity中object类含有两个实例化函数:
[c#]static object instantiate(object original, vector3 position, quaternion rotation);
static object instantiate(object original);
[javascript]static function instantiate(original: object, position: vector3, rotation: quaternion): object;
static function instantiate(original: object): object;
实例化函数跟编辑器中的duplicate命令相似。
克隆游戏对象能够有选择性地指定位置和旋转,默觉得vector3.zero和quaternion.identity。假如克隆了一个组件那么附加的游戏对象也会被克隆;当克隆游戏对象或组件,全部的孩子对象和组件都会被克隆,它们的属性集跟源对象一样;可是克隆的新对象的父母却是null。当然想设置的话能够显示指定;克隆时游戏对象的状态也会被克隆,因而假设源对象是inactive的话克隆出来的对象状态也是inactive的。
能够看看利用instantiate实例化prefab的样例:instantiate应用的4个典型小样例。
prefab的继承
继承是指任何时候当源prefab发生变化时,这些变化将应用于全部已链接到该prefab的游戏对象。比如,假设加入一个新的脚本到该prefab。全部已链接到该prefab的游戏对象都将立马包括该脚本。
可是,改变一个单独实例的属性并同一时候保持链接完整是可能。
改变一个prefab实例的任何属性,能够观察到属性变量名字变为粗体,如今该变量能够被重写,全部的重写属性不会受源prefab变化的影响,这样就能够在保持prefab链接不变的前提下,改动prefab实例使它们变得独一无二。
假设想用新的重写属性值覆盖源prefab和全部实例,能够在inspector中点击applybutton。
注意,源的位置和旋转将不被应用。由于那样会影响到实例的绝对位置并把全部实例放在同一位置。可是从不论什么子或根的祖先的位置和旋转将被应用。由于他们是相对于根的transform来计算的;假设想放弃对特定实例的全部覆盖更新。能够点击revertbutton。
破坏与恢复prefab链接
某些行为能够打破源prefab和单个prefab实例之间的链接,可是链接总是会被修复的。能够打破链接的行为有:
○ 加入或删除一个组件
○ 加入或删除一个子对象
这些行为将给出链接打破的警告/确认消息。假设确认这种行为将会破坏链接 。
若要修复该链接,能够在prefab实例的inspector视图中点击reconnect或applybutton。reconnect将会丢弃与源prefab的全部区别,而apply将会将全部的区别拷贝到源prefab中,因此全部其它的prefab实例都会受到影响。
导入的prefab
当放置一个网格资源到资源目录时,unity会自己主动导入文件并生成一些类似于prefab的网格。而实际上并非网格。仅仅是资源文件本身。
在进行正常预置工作时,资源的实例化名没有某些限制。
资源是作为一个游戏对象在场景中被实例化的,被链接到源资源却不是一个prefab。资源作为正常的游戏对象,能够加入和删除组件。然而,不能对这个资源本身做不论什么变动,由于这将给资源文件本身加入数据。假设要创建一些须要反复使用的东西。应该将资源实例制成一个prefab,步骤同创建prefab,仅仅只是是拖拽资源文件到新建的prefab就可以。
经纬恒润助力路特斯发布旗下首款纯电Hyper SUV
台湾通嘉开关电源驱动芯片LD7750RGR
如何将Chromecast设置为DVI-D显示器
中国移动大数据系列产品重磅发布
华润微:8吋晶圆产线满载,产能利用率在90%以上
prefab是什么_如何创建填充Prefab_Prefab的继承及导入
四大芯片商下一代SoC大战如何打?
恩智浦凭借移动微型扬声器中的9.5V升压电压实现音质突破
雷军:小米第二款5G手机在国内发布,明年第二季度5G产品大规模到来
dfrobot386AMP Module音频放大模块简介
mybatis快速入门
紧凑型有机半导体激光器技术取得重大突破
RS-485适配器将数据线从全双工转换为半双工
三星S8最新消息,纳里?三星S8也要出青春版?外形不变,这是要迷死多少人哟!
能自动熄灭(延时)的卧室照明灯,Lamp with auto power off function
SSD硬盘的优点和缺点
碳中和能效管理云平台的优势是什么
DIPIPM™市场失效分析(1)
激光焊接工艺对PCBA的设计有哪些要求?
经纬恒润:面向常态化运营的园区无人驾驶系统