跳到主要内容

unloadSubscene 卸载子场景

unloadSubscene

类型: MethodDeclaration

所属类: SceneContext

定义位置: scene.ts

描述

卸载子场景

参数 sceneId: 场景ID

参数

参数名类型描述默认值
sceneIdstring--

返回值

类型: void

源代码

位置: 第 1091 行

public unloadSubscene(sceneId: string): void {
const scene = this.subscenes.find(
scene => scene.id === sceneId
)
if (!scene) return
this.subscenes.remove(scene)
const presetIdMap: HashMap<true> = {}
const register = (nodes: SceneObjectDataDirectory) => {
for (const node of nodes) {
if (node.class === 'folder') {
register(node.children)
} else {
presetIdMap[node.presetId] = true
}
}
}
register(scene.objects)
// 获取待删除对象
// 避免写在回调函数中异步执行
const deletedObjects: Array<any> = []
for (const manager of [this.parallax, this.light]) {
for (const group of manager.groups) {
let i = group.length
while (--i >= 0) {
const instance = group[i]
if (presetIdMap[instance.presetId]) {
deletedObjects.push({instance, manager})
}
}
}
}
for (const manager of [this.actor, this.animation, this.region, this.emitter]) {
const list = manager.list
let i = list.length
while (--i >= 0) {
const instance = list[i]
if (presetIdMap[instance.presetId]) {
deletedObjects.push({instance, manager})
}
}
}
Callback.push(() => {
for (const {instance, manager} of deletedObjects) {
instance.destroy()
manager.remove(instance)
}
})
}

文档生成时间:2025/7/7 12:07:06