如何在Godot 4.0中实现游戏运行时动态切换“Keep Screen On”功能
如何在Godot 4.0中实现游戏运行时动态切换“Keep Screen On”功能
嘿,这个需求太贴合实际场景啦!你说得没错,Godot 4项目设置里的「Keep Screen On」选项一旦启动游戏就没法直接修改,但咱们完全可以用引擎内置的API来动态控制屏幕常亮状态,完美实现“关键时刻锁住屏幕不让休眠,非关键时段(比如暂停、主菜单)放开让系统接管”的效果。
核心方法:使用DisplayServer类
Godot 4把显示相关的系统交互都整合到了DisplayServer类里,其中就有专门控制屏幕常亮的原生方法,不需要依赖任何插件,全平台(PC、移动端都支持)通用。
基础控制代码
你可以直接在需要的脚本里调用这两个方法:
- 开启屏幕常亮(阻止屏保/锁屏):
DisplayServer.set_keep_screen_on(true)
- 关闭屏幕常亮(允许系统正常休眠/锁屏):
DisplayServer.set_keep_screen_on(false)
结合你的场景落地
就像你提到的Mario Kart Tour那样,咱们可以把逻辑绑定到游戏的关键节点:
- 当比赛开始(比如进入赛道场景、点击“开始比赛”按钮)时,调用开启方法,确保哪怕玩家暂时没操作,屏幕也不会变暗锁屏;
- 当比赛结束(冲过终点线)、进入暂停菜单或者回到主界面时,调用关闭方法,让系统恢复正常的屏保/锁屏逻辑。
给你举个具体的场景脚本示例:
extends Node2D # 比赛开始时触发 func start_race(): # 开启屏幕常亮 DisplayServer.set_keep_screen_on(true) # 其他比赛初始化逻辑(加载赛道、生成对手等)... # 比赛结束时触发 func end_race(): # 关闭屏幕常亮 DisplayServer.set_keep_screen_on(false) # 其他比赛结束逻辑(显示结算界面、返回主菜单等)... # 暂停游戏时触发 func pause_game(): DisplayServer.set_keep_screen_on(false) get_tree().paused = true # 恢复游戏时触发 func resume_game(): get_tree().paused = false DisplayServer.set_keep_screen_on(true)
小提醒
- 这个方法不受项目设置里「Keep Screen On」选项的限制——哪怕你默认开了常亮,运行时也能关闭;默认没开,也能随时开启;
- 全平台通用,不用针对PC和移动端写不同的适配逻辑。
备注:内容来源于stack exchange,提问作者4444




