相信很多朋友都不知道 Prefab 是什么?为什么要使用Prefab ? 怎么使用Prefab?
接下来,我们就一步一步来揭晓答案。
一、Prefab 是什么 ?
Prefab:大家习惯性地称为“预制件” 或“预制体” ,简单说,就是把场景对象、节点、组件、以及组件上的数据,打包存储起来,方便复用。
在 资源管理器 中的预制件资源,是预制件的序列化文件。
预制件资源被拖拽到 层级管理器 中就会生成一个预制件实例。
双击预制件资源,会进入预制件的编辑模式,可点击 场景编辑器 左上方的按钮来 保存 修改或者 关闭 编辑模式。
预制件节点在 属性检查器 中呈现 绿色 时表示与资源关联正常;呈现 红色 则表示关联的资源丢失。
二、为什么要使用预制体
当我们想制作一个能复用、通用性强、个体之间存异较小的资源,我们应该首选Prefab预制体。
例如:
以下背包中的物品:每个物品都有一张背景边框 ,一张icon 图片,一个label 数量,还有一把锁的图标。
每个背包物品,结构都相同,仅仅是每个元素的内容不同,因此我们就可以设计一个Prefab :
KnapItem(Node) itemBG (Sprite) itemIcon (Sprite) itemCount(Label) itemLockFlag (Sprite)
三、预制件的使用
1、创建预制件
创建预制件有两种方法:
- 在场景中将节点编辑好之后,直接将节点从 层级管理器 拖到 资源管理器 中即可完成预制件资源的创建。
- 点击 资源管理器 左上方的 + 按钮,或者点击面板空白处,然后选择 Node Prefab 即可。
预制体创建完成后,有一个属性:Persistent,标记该预制体是否需要同步,默认值为false 。
2、预制件的使用
(1)、创建预制体和生成预制体实例
将预制件资源从 资源管理器 拖拽到 层级管理器 或 场景编辑器,即可在场景中生成一个预制件的实例。
场景中的预制件实例对象,数据源来自预制件资源的反序列化,所以它的数据默认同步了预制件资源。
如果对预制件实例中的各项属性进行修改,修改的数据会被存储在预制件实例中,不会影响到预制件资源和它生成的其它预制件实例的数据。
(2) 、场景中编辑预制件节点
(1)、常规操作
在 层级管理器 中选中预制件节点,属性检查器 的顶部便会出现几个可操作的按钮:
- **编辑资源图标:**点击后,可以在场景编辑器中编辑资源,还可通过资源管理器中双击预制体资源来实现。
- **取消关联当前预制体资源图标:**还原为普通节点。预制件节点可变为普通节点,即完全脱离和资源的关系。
还可通过点击 Creator 顶部菜单栏中的 节点 -> 取消关联当前的 Prefab 资源 来实现。 - 定位资源图标:便于快速在 资源管理器 中定位到预制件资源,点击后资源管理中的资源会出闪烁。
- 从资源还原图标:将当前预制件实例的数据还原为预制件资源中的数据,其中名字、位置和旋转不会被还原为预制件资源中的数据。
- 更新到资源图标:将当前预制件实例的所有数据更新到所关联的预制件资源中。
(2)、新增节点
在预制件实例下增加的新节点,在节点名字的右下角会有一个 + 标志,它的数据存储在预制件的实例下,不会影响关联的预制件资源的数据。
(3)、新增组件
在预制件实例下增加新组件,在组件名字的后面会有一个 + 标志,它的数据存储在预制件的实例下,所以不会影响关联的预制件资源的数据。
(4)、删除组件
在预制件实例下删除 非预制件实例下新增的组件,会在 属性检查器 上增加一条删除的组件的数据,它的数据存储在预制件的实例下,所以不会影响关联的预制件资源的数据。
四、预制件的使用限制
- 不允许在预制件实例中删除从预制件资源中创建的节点
- 不允许在预制件实例中更改从预制件资源中创建的节点的层级关系
- 不允许预制件嵌套自己