# 创建Prefabs

在微信小游戏中,Prefab资源被看作是一个模版。你可以在编辑器中创建一个Prefab资源,并将其保存在Project窗口中。对于一个Prefab资源,可以实例化出若干个Prefab实例。Prefab实例既可以在编辑中创建保存到场景中,也可以在运行时再进行实例化。

# 创建Prefab资源

创建Prefab资源有两种方式:

  1. 如上图所示,可以在Project窗口右侧右键新建2dPrefab或者3dPrefab。
  2. 如下图所示,可以将Hierarchy的节点拖拽到Project文件夹中,即可生成以选中的节点为根结点的Prefab资源,该节点的所有子节点和组件的数据都会保存在生成的Prefab资源中。

# 创建Prefab实例

在编辑器中创建Prefab实例有两种方式:

  1. 如上图所示,右键Hierarchy窗口中的节点,点击“添加Prefab”,在弹框中选择Prefab资源,会将该Prefab资源的实例增加在所选的节点下。
  2. 如下图所示,可以将Project窗口中的Prefab资源拖拽到Hierarchy窗口的节点下,可以完成Prefab实例的创建。

所有Prefab实例的根结点,在Hierarchy中,都会有在节点最右边有一个箭头,点击此箭头会在一个新的场景标签中打开一个新的Prefab实例。

# 游戏运行时创建Prefab实例

Prefab可以很方便在创建复杂的节点树,在游戏运行时可以很方便的用代码来实现Prefab的实例化。

import engine from "engine";
@engine.decorators.serialize("InstantiatePrefab")
export default class InstantiatePrefab extends engine.Script {
  public onAwake() {
    // 注意:要在运行时加载Prefab资源,需要再编辑器里将该资源设置为入口资源
    engine.loader.load('NewFolder/Planet.prefab').promise.then((prefabAsset) => {
      // 将prefab资源实例化
      const prefabInstance = prefabAsset.instantiate()
      this.entity.transform.addChild(prefabInstance.transform)
    })

  }
}

# 创建Prefab Variant资源

创建方式如上图所示,把Hierarchy中的Prefab根节点拖拽到Project中,会有一个弹窗,让选择是要生成Variant Prefab还是Original Prefab。如果选择Original Prefab就会生成普通Prefab,如果选择Variant Prefab就会生成Prefab变体资源,即Prefab的根结点是另一个Prefab实例的根结点(如下图所示)。

点击咨询小助手