Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

OS

继承: Object

提供对常见操作系统功能的访问。

描述

这个类封装了与主机操作系统通信的最常见功能,例如视频驱动、延时、环境变量、二进制文件的执行、命令行等。

注意:在 Godot 4 中,窗口管理相关的 OS 函数已移动至 DisplayServer 单例。

教程

属性

bool

delta_smoothing

true

bool

low_processor_usage_mode

false

int

low_processor_usage_mode_sleep_usec

6900

方法

void

alert ( String text, String title="Alert!" )

void

close_midi_inputs ( )

void

crash ( String message )

int

create_instance ( PackedStringArray arguments )

int

create_process ( String path, PackedStringArray arguments, bool open_console=false )

void

delay_msec ( int msec ) const

void

delay_usec ( int usec ) const

int

execute ( String path, PackedStringArray arguments, Array output=[], bool read_stderr=false, bool open_console=false )

Key

find_keycode_from_string ( String string ) const

String

get_cache_dir ( ) const

PackedStringArray

get_cmdline_args ( )

PackedStringArray

get_cmdline_user_args ( )

String

get_config_dir ( ) const

PackedStringArray

get_connected_midi_inputs ( )

String

get_data_dir ( ) const

String

get_distribution_name ( ) const

String

get_environment ( String variable ) const

String

get_executable_path ( ) const

PackedStringArray

get_granted_permissions ( ) const

String

get_keycode_string ( Key code ) const

String

get_locale ( ) const

String

get_locale_language ( ) const

int

get_main_thread_id ( ) const

Dictionary

get_memory_info ( ) const

String

get_model_name ( ) const

String

get_name ( ) const

int

get_process_id ( ) const

int

get_processor_count ( ) const

String

get_processor_name ( ) const

PackedStringArray

get_restart_on_exit_arguments ( ) const

int

get_static_memory_peak_usage ( ) const

int

get_static_memory_usage ( ) const

String

get_system_dir ( SystemDir dir, bool shared_storage=true ) const

String

get_system_font_path ( String font_name, int weight=400, int stretch=100, bool italic=false ) const

PackedStringArray

get_system_font_path_for_text ( String font_name, String text, String locale="", String script="", int weight=400, int stretch=100, bool italic=false ) const

PackedStringArray

get_system_fonts ( ) const

int

get_thread_caller_id ( ) const

String

get_unique_id ( ) const

String

get_user_data_dir ( ) const

String

get_version ( ) const

PackedStringArray

get_video_adapter_driver_info ( ) const

bool

has_environment ( String variable ) const

bool

has_feature ( String tag_name ) const

bool

is_debug_build ( ) const

bool

is_keycode_unicode ( int code ) const

bool

is_process_running ( int pid ) const

bool

is_restart_on_exit_set ( ) const

bool

is_sandboxed ( ) const

bool

is_stdout_verbose ( ) const

bool

is_userfs_persistent ( ) const

Error

kill ( int pid )

Error

move_to_trash ( String path ) const

void

open_midi_inputs ( )

String

read_string_from_stdin ( )

bool

request_permission ( String name )

bool

request_permissions ( )

void

revoke_granted_permissions ( )

void

set_environment ( String variable, String value ) const

void

set_restart_on_exit ( bool restart, PackedStringArray arguments=PackedStringArray() )

Error

set_thread_name ( String name )

void

set_use_file_access_save_and_swap ( bool enabled )

Error

shell_open ( String uri )

Error

shell_show_in_file_manager ( String file_or_dir_path, bool open_folder=true )

void

unset_environment ( String variable ) const


枚举

enum RenderingDriver:

RenderingDriver RENDERING_DRIVER_VULKAN = 0

Vulkan 渲染驱动。需要支持 Vulkan 1.0,而 Vulkan 1.1 和 1.2 的功能则会在支持时自动使用。

RenderingDriver RENDERING_DRIVER_OPENGL3 = 1

OpenGL 3 渲染驱动。在桌面平台上使用 OpenGL 3.3 核心配置,在移动设备上使用 OpenGL ES 3.0,在 Web 上使用 WebGL 2.0。


enum SystemDir:

SystemDir SYSTEM_DIR_DESKTOP = 0

桌面目录路径。

SystemDir SYSTEM_DIR_DCIM = 1

DCIM(数码相机图像)目录路径。

SystemDir SYSTEM_DIR_DOCUMENTS = 2

文档目录路径。

SystemDir SYSTEM_DIR_DOWNLOADS = 3

下载目录路径。

SystemDir SYSTEM_DIR_MOVIES = 4

影片目录路径。

SystemDir SYSTEM_DIR_MUSIC = 5

音乐目录路径。

SystemDir SYSTEM_DIR_PICTURES = 6

图片目录路径。

SystemDir SYSTEM_DIR_RINGTONES = 7

铃声目录路径。


属性说明

bool delta_smoothing = true

  • void set_delta_smoothing ( bool value )

  • bool is_delta_smoothing_enabled ( )

如果为 true,则引擎会在每帧之间过滤测量得到的时间增量,并尝试补偿随机变化。仅在启用垂直同步的系统上有效。


bool low_processor_usage_mode = false

  • void set_low_processor_usage_mode ( bool value )

  • bool is_in_low_processor_usage_mode ( )

如果为 true,则引擎会通过只在需要时刷新屏幕来优化处理器的使用。可以改善移动设备上的电池消耗。


int low_processor_usage_mode_sleep_usec = 6900

  • void set_low_processor_usage_mode_sleep_usec ( int value )

  • int get_low_processor_usage_mode_sleep_usec ( )

启用低处理器使用模式时,帧之间的休眠量(单位为微秒)。较高的值将导致较低的 CPU 使用率。


方法说明

void alert ( String text, String title="Alert!" )

使用主机操作系统显示一个模式化的对话框。执行将被阻塞,直到该对话框被关闭。


void close_midi_inputs ( )

关闭系统 MIDI 驱动程序。

注意:该方法只在 Linux、macOS 和 Windows 上实现。


void crash ( String message )

使引擎崩溃(如果是在 @tool 脚本中调用则为编辑器崩溃)。应该用于测试系统的崩溃处理器,其他情况下都不应使用。普通的错误汇报请使用 @GDScript.assert@GlobalScope.push_erroralert(按推荐顺序排列)。另见 kill


int create_instance ( PackedStringArray arguments )

创建一个独立运行的 Godot 新实例。arguments 按给定顺序使用,并以空格分隔。

如果进程创建成功,则该方法将返回新的进程 ID,可以使用它来监视该进程(并可能使用 kill 终止它)。如果进程创建失败,则该方法将返回 -1

注意:该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。


int create_process ( String path, PackedStringArray arguments, bool open_console=false )

创建一个独立于 Godot 运行的新进程。如果 Godot 终止,它也不会终止。path 中指定的路径必须存在,并且是可执行文件或 macOS .app 包。将使用平台路径解析。arguments 按给定顺序使用,并以空格分隔。

在 Windows 上,如果 open_consoletrue,并且该进程是一个控制台应用程序,则一个新的终端窗口将被打开。这在其他平台上将被忽略。

如果进程创建成功,则该方法将返回新的进程 ID,可以使用它来监视进程(并可能使用 kill 终止它)。如果进程创建失败,则该方法将返回 -1

例如,运行项目的另一个实例:

var pid = OS.create_process(OS.get_executable_path(), [])

如果希望运行一个外部命令并检索结果,请参阅 execute

注意:该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。

注意:在 macOS 上,沙盒应用程序被限制为只能运行嵌入式辅助可执行文件,在导出或系统 .app 包期间指定,系统 .app 包将忽略参数。


void delay_msec ( int msec ) const

将当前线程的执行延迟 msec 毫秒。msec 必须大于或等于 0。否则,delay_msec 将不执行任何操作并打印一条错误消息。

注意:delay_msec 是一种阻塞延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 SceneTree.create_timer。使用 SceneTree.create_timer 等待将会延迟那些放置在 await 下方的代码的执行,而不会影响该项目(或编辑器,对于 EditorPluginEditorScript)的其余部分。

注意:当在主线程上调用 delay_msec 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 delay_msec 作为 EditorPluginEditorScript 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。


void delay_usec ( int usec ) const

将当前线程的执行延迟 usec 微秒。usec 必须大于或等于 0。否则,delay_usec 将不执行任何操作并打印一条错误消息。

注意:delay_usec 是一种阻塞延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 SceneTree.create_timer。使用 SceneTree.create_timer 等待将会延迟那些放置在 await 下方的代码的执行,而不会影响该项目(或编辑器,对于 EditorPluginEditorScript)的其余部分。

注意:当在主线程上调用 delay_usec 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 delay_usec 作为 EditorPluginEditorScript 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。


int execute ( String path, PackedStringArray arguments, Array output=[], bool read_stderr=false, bool open_console=false )

执行一条命令。path 中指定的文件必须存在且可执行。将使用平台路径解析。arguments 按给定顺序使用,以空格分隔,会使用引号包裹。如果提供了 output Array,则进程的完整 shell 输出,将作为单个 String 元素追加到 output 中。如果 read_stderrtrue,则标准错误流的输出也将被包含在内。

在 Windows 上,如果 open_consoletrue 并且进程是控制台应用程序,则将打开一个新的终端窗口。该参数在其他平台上被忽略。

如果命令执行成功,该方法将返回命令的退出代码,如果失败则返回 -1

注意:Godot 线程将暂停执行,直到执行的命令终止。使用 Thread 创建一个不会暂停 Godot 线程的独立线程,或者使用 create_process 创建一个完全独立的进程。

例如,要检索工作目录内容的列表:

var output = []
var exit_code = OS.execute("ls", ["-l", "/tmp"], output)

如果希望访问内置的 shell 或执行复合命令,则可以调用特定于平台的 shell。例如:

var output = []
OS.execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output)

注意:该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。

注意:要执行 Windows 命令解释器的内置命令,在 path 中指定 cmd.exe,将 /c 作为第一个参数,并将所需的命令作为第二个参数。

注意:要执行 PowerShell 的内置命令,在 path 中指定 powershell.exe,将 -Command 作为第一个参数,然后将所需的命令作为第二个参数。

注意:要执行 Unix shell 内置命令,请在 path 中指定 shell 可执行文件名称,将 -c 作为第一个参数,并将所需的命令作为第二个参数。

注意:在 macOS 上,沙盒应用程序仅限于运行在导出期间指定的嵌入的辅助可执行文件。


Key find_keycode_from_string ( String string ) const

返回给定字符串(例如“Escape”)的键码。


String get_cache_dir ( ) const

根据操作系统的标准返回全局缓存数据目录。在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_CACHE_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另请参阅 get_config_dirget_data_dir

不要与 get_user_data_dir 混淆,后者返回项目特定的用户数据路径。


PackedStringArray get_cmdline_args ( )

返回传递给引擎的命令行参数。

命令行参数可以写成任何形式,包括 --key value--key=value 两种形式,这样它们就可以被正确解析,只要自定义命令行参数不与引擎参数冲突。

还可以使用 get_environment 方法合并环境变量。

可以设置 ProjectSettings.editor/run/main_run_args 来定义编辑器在运行项目时传递的命令行参数。

下面是一个关于如何使用参数的 --key=value 形式,将命令行参数解析为一个字典的最小示例:

var arguments = {}
for argument in OS.get_cmdline_args():
    if argument.find("=") > -1:
        var key_value = argument.split("=")
        arguments[key_value[0].lstrip("--")] = key_value[1]
    else:
        # 没有参数的选项将出现在字典中,
        # 其值被设置为空字符串。
        arguments[argument.lstrip("--")] = ""

注意:不建议直接传递自定义用户参数,因为引擎可能会丢弃或修改它们。相反,最好的方法是使用标准的 UNIX 双破折号(--),然后传递自定义参数,引擎本身将忽略这些参数。这些可以通过 get_cmdline_user_args 读取。


PackedStringArray get_cmdline_user_args ( )

类似于 get_cmdline_args,但它返回用户参数(在双破折号 -- 或双加号 ++ 参数之后传递的任何参数)。这些都是 Godot 为用户留下的,不做任何改动。++ 可用于 -- 被其他程序拦截的情况(如 startx)。

例如,在下面的命令行中,--fullscreen 不会在 get_cmdline_user_args 中返回,--level 1 只会在 get_cmdline_user_args 中返回:

godot --fullscreen -- --level 1
# 或:
godot --fullscreen ++ --level 1

String get_config_dir ( ) const

根据操作系统的标准,返回全局用户配置目录。在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_CONFIG_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另请参阅 get_cache_dirget_data_dir

不要与 get_user_data_dir 混淆,后者返回项目专用的用户数据路径。


PackedStringArray get_connected_midi_inputs ( )

返回 MIDI 设备名称数组。

如果系统 MIDI 驱动程序之前没有使用 open_midi_inputs 进行初始化,则返回的数组将为空。

注意:该方法在 Linux、macOS 和 Windows 上实现。


String get_data_dir ( ) const

根据操作系统的标准返回全局用户数据目录。在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_DATA_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另请参阅 get_cache_dirget_config_dir

不要与 get_user_data_dir 混淆,后者返回项目专用的用户数据路径。


String get_distribution_name ( ) const

返回 Linux 和 BSD 平台的发行版名称(例如 Ubuntu、Manjaro、OpenBSD 等)。

对于原生 Android 系统,返回与 get_name 相同的值,但对于 LineageOS 等流行的 Android 派生系统,尝试返回自定义 ROM 名称。

对于其他平台,返回与 get_name 相同的值。

注意:Web 平台上不支持这个方法。返回的是空字符串。


String get_environment ( String variable ) const

返回环境变量的值。如果环境变量不存在,则返回一个空字符串。

注意:请仔细检查 variable 的大小写。环境变量名称在除 Windows 之外的所有平台上都区分大小写。


String get_executable_path ( ) const

返回当前引擎可执行文件的路径。

注意:在 macOS 上,请始终使用 create_instance,不要依赖可执行文件的路径。


PackedStringArray get_granted_permissions ( ) const

在 Android 设备上:通过该功能,你可以获取已被授予的危险权限列表。

在 macOS 上(仅限沙盒应用程序):该函数返回应用程序可访问的用户选择的文件夹列表。使用原生文件对话框请求文件夹访问权限。


String get_keycode_string ( Key code ) const

返回给定键码的字符串形式(例如,返回值:"Escape""Shift+Escape")。

另见 InputEventKey.keycodeInputEventKey.get_keycode_with_modifiers


String get_locale ( ) const

将主机操作系统区域设置为 language_Script_COUNTRY_VARIANT@extra 形式的字符串。如果你只想要语言代码而不是操作系统中完全指定的语言环境,可以使用 get_locale_language

language - 2 个或 3 个字母的语言代码,小写。

Script - 可选,4 个字母的文字代码,首字母大写。

COUNTRY - 可选,2 个或 3 个字母的国家地区代码,大写。

VARIANT - 可选,语言变体,地区和排序顺序。变体可以有任意数量的带下划线的关键字。

extra - 可选,分号分隔的附加关键字列表。货币、日历、排序顺序和编号系统信息。


String get_locale_language ( ) const

将主机操作系统区域设置的 2 或 3 个字母的语言代码作为字符串返回,该字符串应在所有平台上保持一致。这相当于提取 get_locale 字符串的 language 部分。

当你不需要有关国家/地区代码或变体的附加信息时,这可用于将完全指定的区域设置字符串缩小为“通用”语言代码。例如,对于使用 fr_CA 语言环境的加拿大法语用户,这将返回 fr


int get_main_thread_id ( ) const

返回主线程的 ID。请参阅 get_thread_caller_id

注意:线程 ID 不是确定的,也许会在应用程序重新启动时被重复使用。


Dictionary get_memory_info ( ) const

返回带有以下键的 Dictionary

"physical" - 可用物理内存的总大小,单位为字节,未知时为 -1。这个值可能比实际的物理内存略小,因为计算时不含内核以及各种设备所保留的内存。

"free" - 在不访问磁盘、不进行其他高成本操作的前提下,能够立即分配的物理内存大小,单位为字节,未知时为 -1。进程也许能够分配更多的物理内存,但是这种分配会需要将不活跃的内存页移动至磁盘,可能花费较长时间。

"available" - 在不扩展交换文件的前提下,能够分配的内存大小,单位为字节,未知时为 -1。包括物理内存和交换分区大小。

"stack" - 当前线程的栈大小,单位为字节,未知时为 -1


String get_model_name ( ) const

返回当前设备的模型名称。

注意:此方法仅在Android和iOS上实现。在不支持的平台上返回 "GenericDevice"


String get_name ( ) const

返回主机操作系统的名称。

在 Windows 上为 "Windows"

在 macOS 上为 "macOS"

在基于 Linux 的操作系统上为 "Linux"

在基于 BSD 的操作系统上为 "FreeBSD""NetBSD""OpenBSD", 会使用 "BSD" 作为回退方案。

在 Android 上为 "Android"

在 iOS 上为 "iOS"

在 Web 上为 "Web"

注意:自定义构建的引擎可能支持其他平台,例如游戏主机,可能返回其他值。

match OS.get_name():
    "Windows":
        print("Windows")
    "macOS":
        print("macOS")
    "Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD":
        print("Linux/BSD")
    "Android":
        print("Android")
    "iOS":
        print("iOS")
    "Web":
        print("Web")

int get_process_id ( ) const

返回项目的进程 ID。

注意:这个方法在 Android、iOS、Linux、macOS 和 Windows 上实现。


int get_processor_count ( ) const

返回主机的逻辑 CPU 核心数。对于启用了超线程的 CPU,这个数会比物理 CPU 核心数大。


String get_processor_name ( ) const

返回主机 CPU 型号的名称(例如 "Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz")。

注意:该方法仅在 Windows、macOS、Linux 和 iOS 上实现。在 Android 和 Web 上,get_processor_name 返回空字符串。


PackedStringArray get_restart_on_exit_arguments ( ) const

返回当项目使用 set_restart_on_exit 自动重新启动时,将使用的命令行参数列表。另请参阅 is_restart_on_exit_set


int get_static_memory_peak_usage ( ) const

返回使用的静态内存的最大数量(仅在调试时有效)。


int get_static_memory_usage ( ) const

返回程序所使用的静态内存量,以字节为单位(仅在调试时有效)。


String get_system_dir ( SystemDir dir, bool shared_storage=true ) const

返回不同平台上常用文件夹的实际路径。可用的位置在 SystemDir 中指定。

注意:这个方法在 Android、Linux、macOS 和 Windows 上实现。

注意:共享存储在 Android 上实现,并允许区分应用程序特定目录和共享目录。共享目录在 Android 上有额外的限制。


String get_system_font_path ( String font_name, int weight=400, int stretch=100, bool italic=false ) const

返回名称为 font_name 并且其他风格也相符的系统字体文件路径。如果没有相匹配的字体,则返回空字符串。

下列别名可用于请求默认字体:无衬线“sans-serif”、有衬线“serif”、等宽“monospace”、手写体“cursive”、花体“fantasy”。

注意:如果没有请求的风格,则可能返回不同风格的字体。

注意:该方法在 Android、iOS、Linux、macOS、Windows 上实现。


PackedStringArray get_system_font_path_for_text (