You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动