Skip to content
预制体功能说明

预制体功能说明

阅读本文大概需要 20 分钟

为了开发者更好的了解与使用预制体,本文主要包含以下 3 个内容:

(1)预制体简介(2)预制体使用指南(3)使用注意事项

预制体简介

预制体是什么

  • 预制体是可重复使用的游戏对象组合,是一种将游戏对象组合成一个整体并保存为一个独立资源的机制。预制体可以用来创建和存储一个游戏对象的所有组件、各项属性和子对象。当需要多次重复使用同一个游戏对象时,便可以使用预制体,将该游戏对象设置为预制体。

预制体基础规则

  • 预制体结构

  • 预制体均包含一个预制体头结点,当创建一个空预制体时,会自动生成一个默认的头节点。

  • 预制体头结点下为预制体子对象,子对象间可以是平级、父子级结构关系

  • 预制体引用对象

    • 编辑状态下将预制体拖拽挂载至主视口、对象管理器中的操作称为预制体引用,生成的对象称为预制体引用对象

预制体使用指南

预制体的创建与存储

  • 新建预制体

  • 方法:点击工程内容-预制体分类中【新建预制体】按钮

  • 已有对象生成为预制体

    • 方法 1:选中对象管理器中对象,点击右键菜单中【生成为预制体】,将选中对象及其子对象生成为预制体

      • 仅同一父节点的对象支持创建

  • 方法 2:选中对象管理器中某实例状态的预制体引用对象头结点,点击右键菜单中【另存为新预制体】,选中的实例状态预制体引用对象将与原预制体脱离引用关系,并生成为新预制体

  • 方法 3:从对象管理器中选中对象拖入至工程内容-预制体分类下

  • 若选中的对象为同父节点且不包含预制体引用的对象,将选中对象及其子对象生成为新预制体,在工程内容-预制体根目录下创建预制体文件夹,在该文件夹中定位并选中预制体

  • 对象管理器中该对象及其子对象变更为预制体引用对象

  • 预制体的存储

    • 工程内容-预制体分类中存储着当前工程下所有的预制体资源

  • 每个预制体以单独的 prefab 文件存在,其所引用的脚本、UI、材质均分别存于对应的文件类型下,不会与 prefab 文件整合

    • 名为“示例”的预制体中引用了名为“DefaultUI”的 UI 文件和名为“test”的脚本文件,锥体 1 引用了名为“新建材质”的材质文件

  • 此时各文件存于各自的目录下

预制体的编辑

  • 预制体编辑视口中进行编辑

    • 入口 1:在工程内容中选中某预制体,点击右键菜单中【编辑】或双击预制体文件,可在预制体编辑视口中打开选中预制体进行编辑

(通过工程内容打开预制体进行编辑)

  • 入口 2:在对象管理器中选中某预制体头结点,点击右键菜单中【编辑预制体】,可在预制体编辑视口中打开选中预制体进行编辑

(通过对象管理器打开预制体进行编辑)

  • 保存预制体修改

    • 预制体编辑视口中保存

      • 点击工程内容中【保存】按钮保存对预制体的修改

  • 切换编辑状态及编辑对象时,点击保存提示弹窗中【保存】按钮

  • 主编辑器中保存

  • 点击某预制体右键菜单中【更新预制体】,将当前在对象管理器中对预制体引用对象的修改保存
  • 点击某预制体右键菜单中【另存为新预制体】,将当前在对象管理器中对预制体引用对象的修改另存为新预制体

预制体的使用

  • 编辑状态

    • 可以在资源库或工程内容中找到预制体,拖拽至对象管理器及主视口中创建预制体引用对象
  • 运行状态

    • 通过 API 动态生成预制体引用对象
ts
/*动态生成预制体引用对象,需要本地资源库或工程内容中预制体资源ID(需要预加载资源)*/
GameObject.spawn("AssetId")

/*异步生成预制体引用对象,需要本地资源库或工程内容中预制体资源ID(无需预加载资源)*/
GameObject.asyncSpawn("AssetId")
/*动态生成预制体引用对象,需要本地资源库或工程内容中预制体资源ID(需要预加载资源)*/
GameObject.spawn("AssetId")

/*异步生成预制体引用对象,需要本地资源库或工程内容中预制体资源ID(无需预加载资源)*/
GameObject.asyncSpawn("AssetId")

预制体的删除

  • 当工程内容中的预制体时,将校验场景中是否含有该预制体的引用对象

    • 若有引用对象,则弹出弹窗

  • 删除引用对象:删除此预制体的同时,删除此预制体在场景中的引用对象

  • 解除引用关系:删除此预制体,但保留场景中的对象,使其变为普通对象,不再依赖于原预制体文件

  • 若没有引用对象,则显示二次确认弹窗

  • 删除预制体文件夹时,显示二次确认弹窗,点击确认后,将对文件夹中的所有预制体执行“删除引用对象”逻辑

预制体的导入、导出

  • 导出预制体

    • 在工程内容-预制体分类下选中某预制体,点击右键菜单中【导出】按钮,在资源管理器中选择导出路径后将该预制体打包导出

    • 将该预制体描述文件(.prefab 文件)以及所有其引用的文件全部导出,并保证文件之间的相对路径不变

      • 若脚本/UI 中引用了其他脚本,多次引用的脚本及路径信息一并导出,保证相对路径不变

  • 导入预制体

    • 点击工程内容-预制体分类下【导入预制体】按钮,在资源管理器中选择要导入的预制体后将预制体导入

  • 导入时将解析预制体文件,并还原所有引用文件至工程中

    • 导入时将显示导入详情面板,给开发者提供 prefab 的结构信息

      • 若当前工程中的文件与导入的 prefab 有冲突,将给用户提供重命名或覆盖操作

        • 覆盖:选择覆盖,导入时将导入的文件覆盖导入;并在文件右侧显示覆盖图标

          • 当原工程中的文件与此文件发生冲突但路径不同时,显示提示如下图

  • 重命名:选择重命名,导入时将导入的文件自动重命名导入

  • 对于脚本类型而言,若重命名修改的脚本正在被其他脚本引用,则树状结构中显示引用此脚本的脚本文件,并在此脚本后显示文本:“该脚本引用了xxx.ts,导入后请手动修改”

  • 若与当前工程中的文件无冲突,则分两种情况

    • 新增:当前工程没有与该文件冲突的文件,显示绿色new标识

    • 忽略:当前工程存在一个完全相同的文件,此时不显示任何标识与操作

解除预制体

  • 在对象管理器中,右键预制体头结点,提供解除预制体操作
  • 该操作能够将预制体引用对象变为普通对象(紫色——白色)

使用预制体功能的注意事项与建议

使用 spawn 动态生成预制体时,需要 使用AssetUtil类去下载加载 预制体 资源,或者将预制体拖入对象管理器中的优先加载区域

使用 asyncSpawn 异步生成预制体时,无需预加载资源