SceneTree 有什么
看不到代码请重新刷新此页面
SceneTree(场景树)是 Godot 引擎的核心管理器,负责统筹游戏/项目的整个节点树、场景生命周期、游戏循环、主线程调度等核心功能。所有节点的创建、销毁、场景切换、进程控制都依赖它,以下是其核心能力和常用属性/方法的分类梳理(基于 Godot 4.x):
一、核心定位
SceneTree 是全局单例(整个游戏只有一个实例),可通过任意节点的 get_tree() 方法获取。它的核心作用是:
管理所有活动节点的层级结构(节点树);
控制游戏的运行/暂停/退出;
处理场景的加载、切换、重载;
调度主线程的回调(如
call_deferred、call_after);管理输入、定时器、网络多线程等全局逻辑。
二、常用属性(Properties)
三、核心方法(Methods)
1. 场景管理(最常用)
2. 游戏进程控制
3. 节点/回调管理
4. 多线程/异步(进阶)
四、常用信号(Signals)
SceneTree 也提供信号来监听全局状态变化:
五、典型使用场景示例
# 1. 切换场景(延迟 2 秒后切到游戏结束场景)
func _on_player_death():
get_tree().call_after(2.0, "change_scene_to_file", "res://Scenes/GameOver.tscn")
# 2. 全局暂停游戏(保留 UI 响应)
func pause_game():
get_tree().paused = true
# 让 UI 节点不受暂停影响
$UI/ResumeButton.process_mode = Node.PROCESS_MODE_ALWAYS
# 3. 退出游戏前确认
func _ready():
get_tree().set_auto_accept_quit(false)
get_tree().quit_requested.connect(_on_quit_request)
func _on_quit_request():
print("是否确认退出?")
# 手动处理退出逻辑,比如弹出确认框后调用 get_tree().quit()
# 4. 给所有敌人分组节点调用方法
func _on_player_attack():
get_tree().call_group("enemies", "on_attack_land", 20)六、关键注意事项
SceneTree的所有方法必须在主线程调用:物理回调(如_physics_process、_on_body_entered)中修改场景树(切换/重载场景、销毁节点)时,需用call_deferred包裹,避免线程冲突;change_scene_to_file是同步加载:大场景会导致卡顿,建议用ResourceLoader.load_threaded_request异步加载后,再调用change_scene_to_packed;create_timer创建的定时器是全局的:无需挂载到任意节点,但需注意手动断开信号避免内存泄漏。
如果需要更聚焦某类功能(比如场景切换的最佳实践、全局暂停的细节),可以进一步说明,我会针对性补充。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 豪米
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

