# 创建Prefabs
在微信小游戏中,Prefab资源被看作是一个模版。你可以在编辑器中创建一个Prefab资源,并将其保存在Project窗口中。对于一个Prefab资源,可以实例化出若干个Prefab实例。Prefab实例既可以在编辑中创建保存到场景中,也可以在运行时再进行实例化。
# 创建Prefab资源
创建Prefab资源有两种方式:
- 如上图所示,可以在Project窗口右侧右键新建2dPrefab或者3dPrefab。
- 如下图所示,可以将Hierarchy的节点拖拽到Project文件夹中,即可生成以选中的节点为根结点的Prefab资源,该节点的所有子节点和组件的数据都会保存在生成的Prefab资源中。
# 创建Prefab实例
在编辑器中创建Prefab实例有两种方式:
- 如上图所示,右键Hierarchy窗口中的节点,点击“添加Prefab”,在弹框中选择Prefab资源,会将该Prefab资源的实例增加在所选的节点下。
- 如下图所示,可以将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实例的根结点(如下图所示)。