OS
继承: Object
提供对常见操作系统功能的访问。
描述
OS 类封装了与主机操作系统通信的最常见功能,例如视频驱动、延时、环境变量、二进制文件的执行、命令行等。
注意:在 Godot 4 中,与窗口管理、剪贴板和 TTS 相关的 OS 函数已被移至 DisplayServer 单例(和 Window 类)。与时间相关的函数已被移除,并且仅在 Time 类中可用。
教程
属性
|
||
|
||
|
方法
枚举
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。
RenderingDriver RENDERING_DRIVER_D3D12 = 2
Direct3D 12 渲染驱动。
RenderingDriver RENDERING_DRIVER_METAL = 3
Metal 渲染驱动。
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
指铃声目录路径。
enum StdHandleType: 🔗
StdHandleType STD_HANDLE_INVALID = 0
标准 I/O 设备无效。无法用这些标准 I/O 设备接收和发送数据。
StdHandleType STD_HANDLE_CONSOLE = 1
标准 I/O 设备为控制台。通常发生在从终端运行 Godot 且未进行重定向的场合。在桌面平台上,从编辑器运行 Godot 时也会用于所有标准 I/O 设备。
StdHandleType STD_HANDLE_FILE = 2
标准 I/O 设备为普通文件。通常发生在终端重定向的场合,例如 godot > stdout.txt、godot < stdin.txt 和 godot > stdout_stderr.txt 2>&1。
StdHandleType STD_HANDLE_PIPE = 3
标准 I/O 设备为 FIFO 或管道。通常发生在终端用到了管道的场合,例如 echo "Hello" | godot。
StdHandleType STD_HANDLE_UNKNOWN = 4
标准 I/O 设备类型未知。
属性说明
如果为 true,则引擎会在每帧之间过滤测量得到的时间增量,并尝试补偿随机变化。这仅适用于垂直同步处于活动状态的系统。
注意:启动时,这与 ProjectSettings.application/run/delta_smoothing 相同。
bool low_processor_usage_mode = false 🔗
如果为 true,则引擎会通过只在需要时刷新屏幕来优化处理器的使用。可以改善移动设备上的电池消耗。
注意:启动时,这与 ProjectSettings.application/run/low_processor_mode 相同。
int low_processor_usage_mode_sleep_usec = 6900 🔗
void set_low_processor_usage_mode_sleep_usec(value: int)
int get_low_processor_usage_mode_sleep_usec()
启用低处理器使用模式时帧之间的睡眠时间,以微秒为单位。更高的值将导致更低的 CPU 使用率。另见 low_processor_usage_mode。
注意:启动时,这与 ProjectSettings.application/run/low_processor_mode_sleep_usec 相同。
方法说明
void add_logger(logger: Logger) 🔗
添加自定义日志记录器,拦截内部消息流。
void alert(text: String, title: String = "Alert!") 🔗
使用主机平台的实现显示一个模式对话框。引擎执行将被阻塞,直到该对话框被关闭。
void close_midi_inputs() 🔗
关闭系统 MIDI 驱动程序。Godot 将不再接收 InputEventMIDI。另见 open_midi_inputs() 和 get_connected_midi_inputs()。
注意:该方法在 Linux、macOS、Windows 和 Web 上实现。
使引擎崩溃(如果在 @tool 脚本中调用,则使编辑器崩溃)。另见 kill()。
注意:该方法应该仅用于测试系统的崩溃处理器,而不用于任何其他目的。对于一般错误报告,请使用(按优先顺序)@GDScript.assert()、@GlobalScope.push_error()、alert()。
int create_instance(arguments: PackedStringArray) 🔗
创建一个独立运行的 Godot 新实例。arguments 按给定顺序使用,并以空格分隔。
如果进程创建成功,则该方法将返回新的进程 ID,可以使用它来监视该进程(并可能使用 kill() 终止它)。如果进程无法创建,则该方法将返回 -1。
如果你希望运行不同的进程,请参阅 create_process()。
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
int create_process(path: String, arguments: PackedStringArray, open_console: bool = false) 🔗
创建一个独立于 Godot 运行的新进程。Godot 终止时它也不会终止。path 中指定的路径必须存在,并且是可执行文件或 macOS 的 .app 捆绑包。将使用平台路径解析。arguments 按给定顺序使用,并以空格分隔。
在 Windows 上,如果 open_console 为 true 并且该进程是一个控制台应用程序,则会打开新的终端窗口。
如果进程创建成功,则该方法将返回新的进程 ID,可以用来监视进程(也可以通过 kill() 来终止进程)。否则该方法返回 -1。
示例:运行当前项目的另一个实例:
var pid = OS.create_process(OS.get_executable_path(), [])
var pid = OS.CreateProcess(OS.GetExecutablePath(), []);
如果希望运行外部命令并获取结果,请参阅 execute()。
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
注意:在 macOS 上,沙盒应用程序被限制为只能运行嵌入式辅助可执行文件,在导出或系统 .app 捆绑包期间指定,系统 .app 捆绑包将忽略参数。
void delay_msec(msec: int) const 🔗
将当前线程的执行延迟 msec 毫秒。msec 必须大于或等于 0。否则,delay_msec() 不执行任何操作并打印一条错误消息。
注意:delay_msec() 是一种阻塞延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 SceneTree.create_timer()。使用 SceneTreeTimer 等待会延迟位于 await 下方的代码的执行,而不会影响该项目(或编辑器,对于 EditorPlugin 和 EditorScript)的其余部分。
注意:当在主线程上调用 delay_msec() 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 delay_msec() 作为 EditorPlugin 或 EditorScript 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。
void delay_usec(usec: int) const 🔗
将当前线程的执行延迟 usec 微秒。usec 必须大于或等于 0。否则,delay_usec() 不执行任何操作并打印一条错误消息。
注意:delay_usec() 是一种阻塞延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 SceneTree.create_timer()。使用 SceneTreeTimer 等待会延迟放置在 await 下方的代码的执行,而不会影响该项目(或编辑器,对于 EditorPlugin 和 EditorScript)的其余部分。
注意:当在主线程上调用 delay_usec() 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 delay_usec() 作为 EditorPlugin 或 EditorScript 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。
int execute(path: String, arguments: PackedStringArray, output: Array = [], read_stderr: bool = false, open_console: bool = false) 🔗
以阻塞方式执行给定进程。path 中指定的文件必须存在且可执行。将使用系统路径解析。arguments 按给定顺序使用,用空格分隔,并用引号包裹。
如果提供了 output 数组,则进程的完整 shell 输出,将作为单个 String 元素被追加到 output。如果 read_stderr 为 true,则标准错误流的输出也会被追加到数组中。
在 Windows 上,如果 open_console 为 true 并且进程是控制台应用程序,则会打开一个新的终端窗口。
该方法返回命令的退出代码,如果进程执行失败,则返回 -1。
注意:主线程将被阻塞,直到执行的命令终止。使用 Thread 创建一个不会阻塞主线程的独立线程,或者使用 create_process() 创建一个完全独立的进程。
例如,要检索工作目录内容的列表:
var output = []
var exit_code = OS.execute("ls", ["-l", "/tmp"], output)
Godot.Collections.Array output = [];
int exitCode = OS.Execute("ls", ["-l", "/tmp"], output);
如果希望访问内置的 shell 或执行复合命令,则可以调用特定于平台的 shell。例如:
var output = []
OS.execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output)
Godot.Collections.Array output = [];
OS.Execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output);
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
注意:要执行 Windows 命令解释器的内置命令,在 path 中指定 cmd.exe,将 /c 作为第一个参数,并将所需的命令作为第二个参数。
注意:要执行 PowerShell 的内置命令,在 path 中指定 powershell.exe,将 -Command 作为第一个参数,然后将所需的命令作为第二个参数。
注意:要执行 Unix shell 内置命令,请在 path 中指定 shell 可执行文件名称,将 -c 作为第一个参数,并将所需的命令作为第二个参数。
注意:在 macOS 上,沙盒应用程序仅限于运行在导出期间指定的嵌入的辅助可执行文件。
注意:在 Android 上,dumpsys 等系统命令只能在 root 设备上运行。
Dictionary execute_with_pipe(path: String, arguments: PackedStringArray, blocking: bool = true) 🔗
创建一个独立于 Godot 运行的新进程并重定向 IO。Godot 终止时它也不会终止。path 中指定的路径必须存在,并且是可执行文件或 macOS 的 .app 捆绑包。将使用平台路径解析。arguments 按给定顺序使用,并以空格分隔。
如果 blocking 为 false,则创建的管道使用非阻塞模式,即读写操作会立即返回。请使用 FileAccess.get_error() 检查最近一次读写操作是否成功。
如果无法创建进程,则该方法返回空的 Dictionary。否则该方法会返回一个 Dictionary,包含以下字段:
"stdio"- 用于访问进程 stdin 和 stdout 管道的 FileAccess(读写)。"stderr"- 用于访问进程 stderr 管道的 FileAccess(只读)。
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
注意:如果要执行 Windows 命令解释器的内置命令,请在 path 中指定 cmd.exe,使用 /c 作为第一个参数并将所需的命令作为第二个参数。
注意:如果要执行 PowerShell 的内置命令,请在 path 中指定 powershell.exe,使用 -Command 作为第一个参数并将所需的命令作为第二个参数。
注意:如果要执行 Unix Shell 的内置命令,请在 path 中指定 shell 可执行文件的名称,使用 -c 作为第一个参数并将所需的命令作为第二个参数。
注意:在 macOS 上,沙盒应用程序被限制为只能运行嵌入式辅助可执行文件,在导出或系统 .app 捆绑包期间指定,系统 .app 捆绑包将忽略参数。
Key find_keycode_from_string(string: String) const 🔗
查找给定字符串对应的键码。返回值等价于 Key 常量。
print(OS.find_keycode_from_string("C")) # 输出 67 (KEY_C)
print(OS.find_keycode_from_string("Escape")) # 输出 4194305 (KEY_ESCAPE)
print(OS.find_keycode_from_string("Shift+Tab")) # 输出 37748738 (KEY_MASK_SHIFT | KEY_TAB)
print(OS.find_keycode_from_string("Unknown")) # 输出 0 (KEY_NONE)
GD.Print(OS.FindKeycodeFromString("C")); // 输出 C (Key.C)
GD.Print(OS.FindKeycodeFromString("Escape")); // 输出 Escape (Key.Escape)
GD.Print(OS.FindKeycodeFromString("Shift+Tab")); // 输出 37748738 (KeyModifierMask.MaskShift | Key.Tab)
GD.Print(OS.FindKeycodeFromString("Unknown")); // 输出 None (Key.None)
String get_cache_dir() const 🔗
根据操作系统的标准返回全局缓存数据目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_CACHE_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另见 get_config_dir() 和 get_data_dir()。
不要与 get_user_data_dir() 混淆,后者返回项目特定的用户数据路径。
PackedStringArray get_cmdline_args() 🔗
Returns the command-line arguments passed to the engine, excluding arguments processed by the engine, such as --headless and --fullscreen.
# Godot has been executed with the following command:
# godot --headless --verbose --scene my_scene.tscn --custom
OS.get_cmdline_args() # Returns ["--scene", "my_scene.tscn", "--custom"]
Command-line arguments can be written in any form, including both --key value and --key=value forms so they can be properly parsed, as long as custom command-line arguments do not conflict with engine arguments.
You can also incorporate environment variables using the get_environment() method.
You can set ProjectSettings.editor/run/main_run_args to define command-line arguments to be passed by the editor when running the project.
Example: Parse command-line arguments into a Dictionary using the --key=value form for arguments:
var arguments = {}
for argument in OS.get_cmdline_args():
if argument.contains("="):
var key_value = argument.split("=")
arguments[key_value[0].trim_prefix("--")] = key_value[1]
else:
# Options without an argument will be present in the dictionary,
# with the value set to an empty string.
arguments[argument.trim_prefix("--")] = ""
var arguments = new Dictionary<string, string>();
foreach (var argument in OS.GetCmdlineArgs())
{
if (argument.Contains('='))
{
string[] keyValue = argument.Split("=");
arguments[keyValue[0].TrimPrefix("--")] = keyValue[1];
}
else
{
// Options without an argument will be present in the dictionary,
// with the value set to an empty string.
arguments[argument.TrimPrefix("--")] = "";
}
}
Note: Passing custom user arguments directly is not recommended, as the engine may discard or modify them. Instead, pass the standard UNIX double dash (--) and then the custom arguments, which the engine will ignore by design. These can be read via get_cmdline_user_args().
PackedStringArray get_cmdline_user_args() 🔗
Returns the command-line user arguments passed to the engine. User arguments are ignored by the engine and reserved for the user. They are passed after the double dash -- argument. ++ may be used when -- is intercepted by another program (such as startx).
# Godot has been executed with the following command:
# godot --fullscreen --custom -- --level=2 --hardcore
OS.get_cmdline_args() # Returns ["--custom"]
OS.get_cmdline_user_args() # Returns ["--level=2", "--hardcore"]
To get arguments passed before -- or ++, use get_cmdline_args().
String get_config_dir() const 🔗
根据操作系统的标准,返回全局用户配置目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_CONFIG_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另见 get_cache_dir() 和 get_data_dir()。
不要与 get_user_data_dir() 混淆,后者返回项目专用的用户数据路径。
PackedStringArray get_connected_midi_inputs() 🔗
如果存在已连接的 MIDI 设备,则返回设备名称的数组。如果尚未使用 open_midi_inputs() 初始化系统 MIDI 驱动,则返回空数组。另见 close_midi_inputs()。
注意:该方法在 Linux、macOS、Windows 和 Web 上实现。
注意:在 Web 平台上,浏览器需要支持 Web MIDI。目前主流浏览器中除了 Safari 都支持。
注意:在 Web 平台上,需要在浏览器中授权才能使用 MIDI 输入。权限请求会在调用 open_midi_inputs() 时进行。用户接受权限请求后浏览器才会处理 MIDI 输入。
根据操作系统的标准返回全局用户数据目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 XDG_DATA_HOME 环境变量来覆盖该路径。有关详细信息,请参阅文档中的《Godot 项目中的文件路径》。另见 get_cache_dir() 和 get_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 平台上不支持这个方法。返回的是空字符串。
PackedByteArray get_entropy(size: int) 🔗
生成填充了密码学安全随机字节的 PackedByteArray,大小为 size。
注意:在大部分平台上,使用该方法生成大量字节可能会造成锁定、让熵的质量变低。大多数情况下请使用 Crypto.generate_random_bytes()。
String get_environment(variable: String) const 🔗
返回给定环境变量的值,如果 variable 不存在,则返回一串空字符串。
注意:请仔细检查 variable 的大小写。环境变量名称在除 Windows 之外的所有平台上都区分大小写。
注意:在 macOS 上,应用程序无权访问 shell 环境变量。
String get_executable_path() const 🔗
返回当前引擎可执行文件的文件路径。
注意:如果想要在 macOS 上运行新的 Godot 实例,请始终使用 create_instance(),不要依赖可执行文件的路径。
PackedStringArray get_granted_permissions() const 🔗
在 Android 设备上:返回已授予的危险权限列表。
在 macOS 上:返回已授予权限列表以及应用程序可访问的用户选择的文件夹列表(仅限沙盒应用程序)。使用原生文件对话框请求文件夹访问权限。
在 iOS、visionOS 上:返回已授予权限列表。
String get_keycode_string(code: Key) const 🔗
以 String 的形式返回给定的键码。
print(OS.get_keycode_string(KEY_C)) # 输出 "C"
print(OS.get_keycode_string(KEY_ESCAPE)) # 输出 "Escape"
print(OS.get_keycode_string(KEY_MASK_SHIFT | KEY_TAB)) # 输出 "Shift+Tab"
GD.Print(OS.GetKeycodeString(Key.C)); // 输出 "C"
GD.Print(OS.GetKeycodeString(Key.Escape)); // 输出 "Escape"
GD.Print(OS.GetKeycodeString((Key)KeyModifierMask.MaskShift | Key.Tab)); // 输出 "Shift+Tab"
另见 find_keycode_from_string()、InputEventKey.keycode、InputEventKey.get_keycode_with_modifiers()。
以 language_Script_COUNTRY_VARIANT@extra 形式的 String 返回主机操作系统区域设置。language 之后的每个子字符串都是可选的,并且可能不存在。
language- 2 个或 3 个字母的语言代码,小写。Script- 4 个字母的文字代码,首字母大写。COUNTRY- 2 个或 3 个字母的国家地区代码,大写。VARIANT- 语言变体,地区和排序顺序。变体可以有任意数量的带下划线的关键字。extra- 分号分隔的附加关键字列表。这可能包含货币、日历、排序顺序和编号系统信息。
如果你只需要语言代码而不是操作系统中完全指定的区域设置,则可以使用 get_locale_language()。
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"- 可用物理内存的总大小,单位为字节。这个值可能比实际的物理内存略小,因为计算时不含由内核以及各种设备所保留的内存。"free"- 无需磁盘访问或其他昂贵操作即可立即分配的物理内存大小,单位为字节。进程也许能够分配更多的物理内存,但是这种操作需要将不活跃的内存页移动至磁盘,这可能会很昂贵。"available"- 无需扩展交换文件即可分配的内存大小,单位为字节。该值包括物理内存和交换空间。"stack"- 当前线程的栈大小,单位为字节。
注意:每个条目的值在其未知时可能是 -1。
String get_model_name() const 🔗
返回当前设备的型号名称。
注意:该方法在 Android、iOS、macOS 和 Windows 上实现。在不支持的平台上返回 "GenericDevice"。
返回主机平台的名称。
在 Windows 上为
"Windows"。在 macOS 上为
"macOS"。在基于 Linux 的操作系统上为
"Linux"。在基于 BSD 的操作系统上为
"FreeBSD"、"NetBSD"、"OpenBSD", 会使用"BSD"作为回退方案。在 Android 上为
"Android"。在 iOS 上为
"iOS"。在 Web 上为
"Web"。
注意:自定义构建的引擎可能支持其他平台,例如游戏主机,可能返回其他值。
match OS.get_name():
"Windows":
print("Welcome to Windows!")
"macOS":
print("Welcome to macOS!")
"Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD":
print("Welcome to Linux/BSD!")
"Android":
print("Welcome to Android!")
"iOS":
print("Welcome to iOS!")
"Web":
print("Welcome to the Web!")
switch (OS.GetName())
{
case "Windows":
GD.Print("Welcome to Windows");
break;
case "macOS":
GD.Print("Welcome to macOS!");
break;
case "Linux":
case "FreeBSD":
case "NetBSD":
case "OpenBSD":
case "BSD":
GD.Print("Welcome to Linux/BSD!");
break;
case "Android":
GD.Print("Welcome to Android!");
break;
case "iOS":
GD.Print("Welcome to iOS!");
break;
case "Web":
GD.Print("Welcome to the Web!");
break;
}
注意:在 Web 平台上,仍然可以通过功能标签确定主机平台的操作系统。请参阅 has_feature()。
int get_process_exit_code(pid: int) const 🔗
在已启动进程运行结束后返回其退出码(见 is_process_running())。
如果 pid 不是已启动子进程的 PID 或者该进程仍在运行,亦或当前平台未实现该方法,则返回 -1。
注意:如果 pid 是 macOS 捆绑包 App 进程,则返回 -1。
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
返回主机用来唯一标识该应用程序的编号。
注意:该方法在 Web 上始终返回 0。
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 🔗
返回程序正在使用的静态内存量,以字节为单位。仅适用于调试版本。
StdHandleType get_stderr_type() const 🔗
返回标准错误设备的类型。
注意:该方法在 Linux、macOS、Windows 上实现。
StdHandleType get_stdin_type() const 🔗
返回标准输入设备的类型。
注意:该方法在 Linux、macOS、Windows 上实现。
注意:在导出的 Windows 构建中,要访问标准输入请运行控制台包装可执行文件。如果需要具有完整控制台支持的独立可执行文件,请使用带有 windows_subsystem=console 标志进行编译的自定义构建。
StdHandleType get_stdout_type() const 🔗
返回标准输出设备的类型。
注意:该方法在 Linux、macOS、Windows 上实现。
String get_system_ca_certificates() 🔗
返回操作系统信任的认证机构列表,是 PEM 格式的证书相连后的字符串。
String get_system_dir(dir: SystemDir, shared_storage: bool = true) const 🔗
返回不同平台上常用文件夹的路径,如 dir 所定义。有关可用位置,请参阅 SystemDir 常量。
注意:这个方法在 Android、Linux、macOS 和 Windows 上实现。
注意:共享存储在 Android 上实现,如果 shared_storage 为 true,则允许区分应用程序特定目录和共享目录。共享目录在 Android 上有额外的限制。
String get_system_font_path(font_name: String, weight: int = 400, stretch: int = 100, italic: bool = false) const 🔗
返回带有 font_name 和样式的系统字体文件的路径。如果未找到匹配的字体,则返回空字符串。
下列别名可用于请求默认字体:无衬线“sans-serif”、有衬线“serif”、等宽“monospace”、手写体“cursive”、花体“fantasy”。
注意:如果请求的样式不可用,则返回的字体可能具有不同的样式。
注意:该方法在 Android、iOS、Linux、macOS、Windows 上实现。
PackedStringArray get_system_font_path_for_text(font_name: String, text: String, locale: String = "", script: String = "", weight: int = 400, stretch: int = 100, italic: bool = false) const 🔗
返回系统替换字体文件路径的数组,这些字体与名称为 font_name 并且其他风格也相符的字体相近,可用于指定的文本、区域设置以及文字。如果没有相匹配的字体,则返回空数组。
下列别名可用于请求默认字体:无衬线“sans-serif”、有衬线“serif”、等宽“monospace”、手写体“cursive”、花体“fantasy”。
注意:根据操作系统的不同,无法保证任何返回的字体都适合渲染指定的文本。应该按照返回的顺序加载并检查字体,选用第一个合适的字体。
注意:如果没有请求的风格,或者属于不同的字体家族,则可能返回不同风格的字体。
注意:该方法在 Android、iOS、Linux、macOS、Windows 上实现。
PackedStringArray get_system_fonts() const 🔗
返回可用的字体家族名称列表。
注意:该方法在 Android、iOS、Linux、macOS、Windows 上实现。
返回全局临时数据目录,遵循操作系统标准。
int get_thread_caller_id() const 🔗
返回当前线程的 ID。这可用于日志,以简化多线程应用程序的调试。
注意:线程 ID 不是确定的,也许会在应用程序重新启动时被重复使用。
String get_unique_id() const 🔗
返回特定于该设备的一个字符串。
注意:如果用户重新安装操作系统、升级操作系统或修改硬件,则该字符串可能会更改,恕不另行通知。这意味着它通常不应用于加密持久数据,因为在意外的 ID 更改会使之前保存的数据变得无法访问。返回的字符串也可能会被外部程序伪造,因此出于安全目的,请勿依赖该方法返回的字符串。
注意:在 Web 上,返回空字符串并生成错误,因为出于安全考虑无法实现该方法。
String get_user_data_dir() const 🔗
返回写入用户数据的绝对目录路径(Godot 中的 user:// 目录)。该路径取决于项目名称和 ProjectSettings.application/config/use_custom_user_dir。
在 Windows 上,这是
%AppData%\Godot\app_userdata\[project_name];如果已设置use_custom_user_dir,则为%AppData%\[custom_name]。%AppData%扩展为%UserProfile%\AppData\Roaming。在 macOS 上,这是
~/Library/Application Support/Godot/app_userdata/[project_name];如果已设置use_custom_user_dir,则为~/Library/Application Support/[custom_name]。在 Linux 和 BSD 上,这是
~/.local/share/godot/app_userdata/[project_name];如果已设置use_custom_user_dir,则为~/.local/share/[custom_name]。在 Android 和 iOS 上,这是内部存储或外部存储中的沙盒目录,具体取决于用户的配置。
在 Web 上,这是由浏览器管理的虚拟目录。
如果项目名称为空,则 [project_name] 将回退为 [unnamed project]。
请勿与 get_data_dir() 混淆,后者返回的是全局(非项目特定的)用户主目录。
返回操作系统的确切生产和构建版本。这与营销中使用的品牌版本不同。这有助于区分操作系统的不同版本,包括次要版本、内部版本和自定义版本。
对于 Windows,返回主要和次要版本,以及构建号。例如对于 Windows 10 版本,返回的字符串可能看起来像
10.0.9926。对于滚动发行版,例如 Arch Linux,会返回一个空字符串。
对于 macOS 和 iOS,会返回主要和次要版本,以及补丁号。
对于 Android,会返回 SDK 版本和增量构建号。如果是自定义的 ROM,将会尝试返回其版本。
注意:该方法在 web 平台上不被支持。它将返回一个空字符串。
String get_version_alias() const 🔗
返回用于营销的品牌版本,后接构建号(Windows 上)、版本号(macOS 上)或 SDK 版本和小构建号(Android 上)。例如 11 (build 22000)、Sequoia (15.0.0)、15 (SDK 35 build abc528-11988f)。
这个值可以附加到 get_name() 后面,获取该操作系统完整、人类可读的操作系统名称和版本组合。“24H2”等 Windows 功能更新不包含在结果字符串中,但会识别 Windows Server(例如 2025 (build 26100) 表示 Windows Server 2025)。
注意:该方法仅在 Windows、macOS、Android 上支持。在其他操作系统上返回值与 get_version() 相同。
PackedStringArray get_video_adapter_driver_info() const 🔗
返回用户当前激活的显卡的视频适配器驱动程序名称和版本,返回为一个 PackedStringArray。另见 RenderingServer.get_video_adapter_api_version()。
第一个元素保存驱动程序的名称,如 nvidia、amdgpu 等。
第二个元素保存驱动程序的版本。例如 Linux/BSD 平台上的 nvidia 驱动程序,其版本格式为 510.85.02。对于 Windows,其驱动程序的格式是 31.0.15.1659。
注意:该方法仅在 Linux/BSD 和 Windows 上不以无头模式运行时才受支持。在其他平台上,它返回一个空数组。
注意:会话中首次调用该方法时会比较慢,可能会花费好几秒,具体取决于操作系统和硬件。在主线程上调用时会阻塞,因此建议使用 Thread 在独立线程中调用。这样引擎就可以一边收集信息一边运行了。不过 get_video_adapter_driver_info() 不是线程安全的,因此不应该在同一时间使用多个线程调用。
var thread = Thread.new()
func _ready():
thread.start(
func():
var driver_info = OS.get_video_adapter_driver_info()
if not driver_info.is_empty():
print("驱动: %s %s" % [driver_info[0], driver_info[1]])
else:
print("驱动:(未知)")
)
func _exit_tree():
thread.wait_to_finish()
bool has_environment(variable: String) const 🔗
如果名称为 variable 的环境变量存在,则返回 true。
注意:请仔细检查 variable 的大小写。环境变量名称在除 Windows 之外的所有平台上都区分大小写。
bool has_feature(tag_name: String) const 🔗
如果当前运行的实例支持给定功能标签的功能,则返回 true,具体取决于平台、构建等。可用于检查当前是否正在运行调试构建,是否在某个平台或架构上,等等。详见《功能标签》文档。
注意:标签名称区分大小写。
注意:在 Web 平台上,会定义 web_android、web_ios、web_linuxbsd、web_macos、web_windows 的其中之一,表示宿主平台。
如果用于运行项目的 Godot 二进制文件是调试导出模板,或是在编辑器中运行时,则返回 true。
如果用于运行项目的 Godot 二进制文件是发布导出模板,则返回 false。
注意:要检查用于运行项目的 Godot 二进制文件是否是导出模板(调试或发布),请改用 OS.has_feature("template")。
bool is_keycode_unicode(code: int) const 🔗
如果输入的键码对应 Unicode 字符,则返回 true。键码列表见 Key 常量。
print(OS.is_keycode_unicode(KEY_G)) # 输出 true
print(OS.is_keycode_unicode(KEY_KP_4)) # 输出 true
print(OS.is_keycode_unicode(KEY_TAB)) # 输出 false
print(OS.is_keycode_unicode(KEY_ESCAPE)) # 输出 false
GD.Print(OS.IsKeycodeUnicode((long)Key.G)); // 输出 True
GD.Print(OS.IsKeycodeUnicode((long)Key.Kp4)); // 输出 True
GD.Print(OS.IsKeycodeUnicode((long)Key.Tab)); // 输出 False
GD.Print(OS.IsKeycodeUnicode((long)Key.Escape)); // 输出 False
bool is_process_running(pid: int) const 🔗
如果该子进程 ID(pid)仍在运行,则返回 true;如果它已终止,则返回 false。pid 必须是从 create_process() 生成的有效 ID。
注意:该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。
bool is_restart_on_exit_set() const 🔗
如果项目因任何原因退出时将自动重新启动,则返回 true,否则返回 false。另见 set_restart_on_exit() 和 get_restart_on_exit_arguments()。
如果该应用程序在沙箱中运行,则返回 true。
注意:该方法仅在 macOS 和 Linux 上实现。
bool is_stdout_verbose() const 🔗
如果引擎是使用 --verbose 或 -v 命令行参数执行的,或者如果 ProjectSettings.debug/settings/stdout/verbose_stdout 为 true,则返回 true。另见 @GlobalScope.print_verbose()。
bool is_userfs_persistent() const 🔗
如果 user:// 文件系统是持久的,即玩家退出并再次开始游戏后其状态相同,则返回 true。与 Web 平台相关,这种持久性可能不可用。
杀死(终止)由给定进程 ID(pid)标识的进程,例如由 execute() 在非阻塞模式下返回的那个进程 ID。另见 crash()。
注意:该方法也可用于杀死不是由引擎产生的进程。
注意:该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。
Error move_to_trash(path: String) const 🔗
将给定 path 处的文件或目录移动到系统的回收站。另见 DirAccess.remove()。
该方法仅支持全局路径,所以可能需要使用 ProjectSettings.globalize_path()。请勿将其用于 res:// 中的文件,因为它在导出后的项目中是无法正常工作的。
如果找不到文件或目录,或者系统不支持该方法,则返回 @GlobalScope.FAILED。
var file_to_remove = "user://slot1.save"
OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))
var fileToRemove = "user://slot1.save";
OS.MoveToTrash(ProjectSettings.GlobalizePath(fileToRemove));
注意:该方法在 Android、Linux、macOS 和 Windows 上实现。
注意:如果用户在其系统上禁用了回收站,则该文件将被永久删除。
void open_midi_inputs() 🔗
初始化系统 MIDI 驱动的单例,允许 Godot 接收 InputEventMIDI。另见 get_connected_midi_inputs() 和 close_midi_inputs()。
注意:该方法在 Linux、macOS、Windows、Web 上实现。
注意:在 Web 平台上,浏览器需要支持 Web MIDI。目前主流浏览器中除了 Safari 都支持。
注意:在 Web 平台上,需要在浏览器中授权才能使用 MIDI 输入。权限请求会在调用 open_midi_inputs() 时进行。用户接受权限请求后浏览器才会处理 MIDI 输入。
Error open_with_program(program_path: String, paths: PackedStringArray) 🔗
使用指定的应用程序打开一个或多个文件/目录。program_path 指定的是用来打开文件的应用程序路径,paths 中包含的是要打开的文件/目录的数组。
注意:大多数情况下只有 macOS 上使用 create_process() 可能失败才需要使用该函数。其他平台会使用 create_process() 作为回退实现。
注意:在 macOS 上,理想情况下 program_path 应该是 .app 捆绑包的路径。
PackedByteArray read_buffer_from_stdin(buffer_size: int = 1024) 🔗
从标准输入读取用户输入的原始数据字符串。这个操作是阻塞的 ,如果在主线程上调用 read_buffer_from_stdin() 就会导致窗口冻结。
如果标准输入为控制台,则该方法会阻塞到程序在标准输入中接收到换行(通常是用户按下了 Enter)。
如果标准输入为管道,则该方法会阻塞到读取指定数量的数据或管道关闭。
如果标准输入为文件,则该方法会读取指定数量的数据(到达文件末尾时则不足指定数量)并立即返回。
注意:该方法在 Linux、macOS 和 Windows 上实现。
注意:在导出的 Windows 版本中,运行控制台包装器可执行文件来访问终端。如果标准输入为控制台,那么不通过控制台包装器运行就会导致卡死。如果标准输入为管道或文件,那么就可以不借助控制台包装器直接使用。如果你需要具有控制台支持的单个可执行文件,请使用启用 windows_subsystem=console 标志编译的自定义构建。
String read_string_from_stdin(buffer_size: int = 1024) 🔗
从标准输入读取用户输入。这个操作可能导致阻塞 ,如果是在主线程上调用的 read_string_from_stdin(),就会导致窗口冻结。
如果标准输入是控制台,则该方法会阻塞到程序在标准输入中接收到一个断行为止(通常由用户按下 Enter 触发)。
如果标准输入是管道,则该方法会阻塞至读取指定量的数据或管道断开为止。
如果标准输入是文件,则该方法会读取指定量的数据(到达文件末尾时会则更少)并立即返回。
注意:该方法会自动将 \r\n 换行替换为 \n 并移除字符串末尾的换行。读取未经处理的数据请使用 read_buffer_from_stdin()。
注意:该方法在 Linux、macOS 和 Windows 上实现。
注意:使用导出的 Windows 版本时,如需访问终端,请运行控制台包装器可执行文件。如果标准输入为控制台,不使用控制台包装器运行时调用该方法会导致卡死。如果标准输入为管道或文件,则可以不使用控制台包装器。如果你需要具有控制台支持的单个可执行文件,请使用启用 windows_subsystem=console 标志编译的自定义构建。
void remove_logger(logger: Logger) 🔗
移除由 add_logger() 添加的自定义日志记录器。
bool request_permission(name: String) 🔗
向操作系统请求名为 name 的权限。如果已授权则返回 true。另见 MainLoop.on_request_permissions_result。
name 必须是权限的全名。例如:
OS.request_permission("android.permission.READ_EXTERNAL_STORAGE")OS.request_permission("android.permission.POST_NOTIFICATIONS")OS.request_permission("macos.permission.RECORD_SCREEN")OS.request_permission("appleembedded.permission.AUDIO_RECORD")
注意:在 Android 上,导出时必须设置权限。
注意:该方法在 Android、macOS、visionOS 上实现。
向操作系统请求危险权限。如果已授权则返回 true。另见 MainLoop.on_request_permissions_result。
注意:导出时必须检查权限。
注意:该方法仅在 Android 上实现。安装 Android 应用时会自动授予普通权限。
void revoke_granted_permissions() 🔗
在 macOS(仅限沙盒应用程序)上,该功能会清除应用程序可访问的用户选择的文件夹列表。
void set_environment(variable: String, value: String) const 🔗
将环境变量 variable 的值设置为 value。运行 set_environment() 后,会为 Godot 进程和任何用 execute() 执行的进程设置该环境变量。该环境变量不会持续存在于 Godot 进程终止后运行的进程中。
注意:环境变量的名称在除 Windows 外的所有平台上都是区分大小写的。名称 variable 不能为空,也不能包含 = 字符。在 Windows 上,在环境块中注册的 variable、value、= 以及 null 终止符的总长度有 32767 个字符的限制。
void set_restart_on_exit(restart: bool, arguments: PackedStringArray = PackedStringArray()) 🔗
如果 restart 为 true,则项目在使用 SceneTree.quit() 或 Node.NOTIFICATION_WM_CLOSE_REQUEST 退出时,会自动重新启动。可以提供命令行 arguments。要使用最初用于运行项目的命令行参数重新启动项目,请将 get_cmdline_args() 作为 arguments 的值传递。
该方法可用于应用需要重新启动的设置更改。另见 is_restart_on_exit_set() 和 get_restart_on_exit_arguments()。
注意:该方法只在桌面平台上有效,并且只在项目不是从编辑器启动时有效。不会影响移动和 Web 平台,或者当项目从编辑器启动时。
注意:如果项目进程崩溃或被用户杀死(通过发送 SIGKILL 而不是通常的 SIGTERM),项目不会自动重新启动。
Error set_thread_name(name: String) 🔗
为当前线程分配指定的名称。如果在当前平台不可使用,则返回 @GlobalScope.ERR_UNAVAILABLE。
void set_use_file_access_save_and_swap(enabled: bool) 🔗
如果 enabled 为 true,那么在以写模式打开文件时,会使用在同一位置打开的临时文件。关闭时会自动将其应用至目标文件。
适用于文件可能被杀毒软件、文本编辑器、甚至 Godot 编辑器自己等其他程序打开的场景。
Error shell_open(uri: String) 🔗
请求操作系统使用最合适的程序打开由 uri 标识的资源。例如:
OS.shell_open("C:\\Users\\name\\Downloads")在 Windows 上会用资源管理器打开用户的 Downloads 文件夹。OS.shell_open("C:/Users/name/Downloads")在 Windows 也会用资源管理器打开用户的 Downloads 文件夹。OS.shell_open("https://godotengine.org")会使用默认网页浏览器打开 Godot 官方网站。OS.shell_open("mailto:example@example.com")会打开默认电子邮件客户端并将“收件人”字段设置为example@example.com。其他支持自定义的字段见 RFC 2368 - [code]mailto[/code] URL 方案。
可以使用 ProjectSettings.globalize_path() 将 res:// 和 user:// 项目路径转换为系统路径,以便与该方法一起使用。
注意:请使用 String.uri_encode() 对 URL 中的字符进行编码,得到的 URL 才能安全使用、可移植。尤其是在包含换行的情况下。否则项目导出至 Web 平台后 shell_open() 可能无法正常工作。
注意:这个方法在 Android、iOS、Web、Linux、macOS 以及 Windows 上实现。
Error shell_show_in_file_manager(file_or_dir_path: String, open_folder: bool = true) 🔗
请求操作系统打开文件管理器,导航至给定的文件或目录路径 file_or_dir_path 并选中目标文件或文件夹。
如果 open_folder 为 true 并且 file_or_dir_path 是有效的目录路径,则操作系统将打开文件管理器并导航到目标文件夹,而不选择任何内容。
请使用 ProjectSettings.globalize_path() 将 res:// 和 user:// 项目路径转换为系统路径以与该方法一起使用。
注意:目前该方法仅在 Windows 和 macOS 上实现。在其他平台上,它会回退至使用前缀为 file:// 的 file_or_dir_path 目录路径调用 shell_open()。
void unset_environment(variable: String) const 🔗
如果给定的环境变量存在,则从当前环境中移除。variable 名称不能为空或包含 = 字符。在运行 unset_environment() 后,将为 Godot 进程和使用 execute() 执行的任何进程移除环境变量。环境变量的移除并不会持续到 Godot 进程终止后运行的进程。
注意:环境变量名称在除 Windows 以外的所有平台上都区分大小写。