# 游戏场景和节点管理
# 场景资源加载
场景资源是游戏中负责管理节点以及一些渲染配置的一种资源,加载场景资源和加载其他资源的方式一致。
// 自动清除当前场景
engine.loader.load("Assets/Scene/MainUI.scene").promise.then(function (scene) {
// Do something with the scene resoruce.
});
# 加载、卸载场景实例
游戏中加载场景实例可以使用以下方式:
engine.loader.load("Assets/Scene/MainUI.scene").promise.then(function (scene) {
engine.game.playScene(scene);
});
场景资源本身区分2D场景和3D场景,但是接口层面并不做区分,但是其返回值与场景类型相关。
engine.loader.load("Assets/Scene/MainUI.scene").promise.then(function (scene) {
/**
* 如果场景是2D场景,返回的root是2D节点;如果场景是3D场景,返回的root是3D节点。
* 如果当前有同样类型已经被加载的场景实例,那么这个场景实例会被自动卸载。
*/
const root = engine.game.playScene(scene);
});
用户也可以手动卸载场景实例:
engine.game.clearScene(true /** 卸载3D场景实例 */, true /** 卸载2D场景实例 */);
# 场景实例设置配置
2D、3D场景资源会有一些描述场景相关特性的配置,比如2D场景的适配参数,3D场景的雾效和光照配置。这些配置用户在运行时也能够更改这些配置来动态改变场景实例的相关特性。
engine.game.activeScene.root; // 获取当前3D场景的根节点
engine.game.activeScene.settings.fogColor = engine.Vector3.createFromNumber(0.5, 0.5, 1); // 设置当前3D场景的雾效的颜色
engine.game.activeScene2D.root; // 获取当前2D场景的根节点
// 设置当前2D场景的设计分辨率
engine.game.activeScene2D.settings.designWidth = 1280;
engine.game.activeScene2D.settings.designHeight = 720;
# 运行时节点管理
当用户在运行时移除节点的时候,比如:
entity.transform.removeChild(childTransform);
被移除的节点并不会被销毁,而是被系统暂时回收,这意味着用户可以持有这个节点,然后再把它放回到场上,来完成对象池的功能。但是一旦用户切换了场景,这些被系统暂时回收的节点会被立即销毁,如果用户在这时尝试再把节点放回到场上会出现错误。
如果用户想要跨场景复用节点,可以使用常驻节点来实现。
engine.game.markAsPersist(entity);
常驻节点以及子节点在场景切换时不会自动销毁,用户必须手动销毁。