场景内的东西其实涉及的比较多,模型,素材,材质,读取的其他资源等等
首先是自己读取的素材 进行释放,然后再递归场景内的元素 逐一释放
这部分 进入调试模式 查看 场景内的物体元素
类似代码这里:
function disposeNode(node) {
if (!node) return;
// 释放几何体
if (node.geometry) {
node.geometry.dispose();
}
// 释放材质
if (node.material) {
if (Array.isArray(node.material)) {
// 如果材质是数组(多材质)
node.material.forEach((material) => material.dispose());
} else {
node.material.dispose();
}
}
// 释放纹理(如果材质中有纹理,纹理由 WebGL 管理,需要单独释放)
if (node.material && node.material.map) {
node.material.map.dispose();
}
// 递归释放子节点
if (node.children) {
while (node.children.length > 0) {
disposeNode(node.children[0]);
node.remove(node.children[0]);
}
}
}

问 路由跳转时内存泄漏问题