OS¶
继承: Object
提供对通用操作系统功能的访问。
描述¶
OS类包装了与主机操作系统通信的最常见功能,例如视频驱动程序、延迟、环境变量、二进制文件的执行、命令行等。
注意:与窗口管理、剪贴板和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 Core Profile,在移动设备上使用OpenGL ES 3.0,在Web上使用WebGL 2.0。
RenderingDriver RENDERING_DRIVER_D3D12 = 2
Direct3D 12渲染驱动程序。
RenderingDriver RENDERING_DRIVER_METAL = 3
金属渲染驱动程序。
enum SystemDir: 🔗
SystemDir SYSTEM_DIR_DESKTOP = 0
指桌面目录路径。
SystemDir SYSTEM_DIR_DCIM = 1
指DCIM(数码摄像机图像)目录路径。
SystemDir SYSTEM_DIR_DOCUMENTS = 2
引用Documents目录路径。
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设备是一个控制台。这通常发生在从没有重定向的终端运行i3D时。当从编辑器运行i3D时,这也用于所有标准I/O设备,至少在桌面平台上是这样。
StdHandleType STD_HANDLE_FILE = 2
标准I/O设备是常规文件。这通常发生在来自终端的重定向中,例如i3d>stdout. txt,i3d<stdin.txt或i3d>stdout_stderr.txt 2>&1。
StdHandleType STD_HANDLE_PIPE = 3
标准I/O设备是FIFO/管道。这通常发生在终端使用管道时,例如echo“Hello”|i3d。
StdHandleType STD_HANDLE_UNKNOWN = 4
标准I/O设备类型未知。
属性说明¶
如果true,则引擎过滤每帧之间测量的时间增量,并尝试补偿随机变化。这仅适用于V-Sync处于活动状态的系统。
注意:在启动时,这与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 alert(text: String, title: String = "Alert!") 🔗
使用主机平台的实现显示模态对话框。引擎执行被阻塞,直到对话框关闭。
void close_midi_inputs() 🔗
关闭系统MIDI驱动程序。i3D将不再接收InputEventMIDI。另请参见open_midi_inputs()和get_connected_midi_inputs()。
注意:此方法在Linux、macOS、Windows和Web上实现。
使引擎崩溃(如果在@tools脚本中调用编辑器,则使编辑器崩溃)。另请参阅kill()。
注意:此方法应该仅用于测试系统的崩溃处理程序,而不是用于任何其他目的。对于一般错误报告,请使用(按优先顺序)@S3Script.assert()、@GlobalScope.push_error()或alert()。
int create_instance(arguments: PackedStringArray) 🔗
创建独立运行的i3D新实例。arguments按给定顺序使用,并用空格分隔。
如果进程创建成功,此方法返回新进程的ID,您可以使用它来监视进程(并可能使用kill()终止它)。如果无法创建进程,此方法返回-1。
如果您希望运行不同的进程,请参见create_process()。
注意:此方法在Android、Linux、macOS和Windows上实现。
int create_process(path: String, arguments: PackedStringArray, open_console: bool = false) 🔗
创建一个独立于 i3D 运行的新进程。当 i3D 终止时,它不会终止。path中指定的路径必须存在,并且必须是可执行文件或 macOS .app 捆绑包。路径根据当前平台进行解析。
在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会延迟放置在等待下方的代码的执行,而不会影响项目的其余部分(或编辑器,用于EditorPlugins和EditorScripts)。
注意:当在主线程上调用delay_msec()时,它会冻结项目,并阻止它重新绘制和注册输入,直到延迟过去。当使用delay_msec()作为EditorPlugin或EditorScript的一部分时,它会冻结编辑器,但如果项目当前正在运行,它不会冻结项目(因为项目是一个独立的子进程)。
void delay_usec(usec: int) const 🔗
将当前线程的执行延迟usec微秒。usec必须大于或等于0。否则,delay_usec()不执行任何操作并打印错误消息。
注意:delay_usec()是延迟代码执行的阻塞方式。要以非阻塞方式延迟代码执行,您可以使用SceneTree.create_timer()。等待SceneTreeTimer会延迟放置在下方的代码的执行,等待而不会影响项目的其余部分(或编辑器,用于EditorPlugins和EditorScripts)。
注意:当在主线程上调用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。
在Windows上,如果read_stderr是true并且进程是控制台app,则打开一个新的终端窗口。
此方法返回命令的退出代码,如果进程执行失败,则返回-1。
注意:主线程将被阻塞,直到执行的命令终止。使用Thread创建一个不会阻塞主线程的单独线程,或者使用create_process()创建一个完全独立的进程。
例如,检索工作目录的内容列表:
var output = []
var exit_code = OS.execute("ls", ["-l", "/tmp"], output)
i3D.Collections.Array output = [];
int exitCode = OS.Execute("ls", ["-l", "/tmp"], output);
If you wish to access a shell built-in or execute a composite command, a platform-specific shell can be invoked. For example:
var output = []
OS.execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output)
i3D.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上,系统命令,如Dumthy s只能在root设备上运行。
Dictionary execute_with_pipe(path: String, arguments: PackedStringArray, blocking: bool = true) 🔗
使用重定向的IO创建一个独立于i3D运行的新进程。它不会在i3D终止时终止。path中指定的路径必须存在,并且是可执行文件或macOS. app包。路径根据当前平台解析。arguments按给定顺序使用,并用空格分隔。
如果blocking为false,则创建的管道在非阻塞模式下工作,即读和写操作将立即返回。使用FileAccess.get_error()检查最后一次读/写操作是否成功。
如果无法创建进程,则此方法返回一个空的Dictionary。否则,此方法返回一个Dictionary,其中包含以下键:
-"标准输入输出"-FileAccess访问进程stdin和stdout管道(读/写)。
-"stderr"-FileAccess访问进程stderr管道(只读)。
-"pid"-进程ID作为int,您可以使用它来监控进程(并可能使用kill()终止它)。
注意:此方法在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 🔗
查找给定字符串的keycode。返回的值与 Key 常量等效。
print(OS.find_keycode_from_string("C")) # Prints 67 (KEY_C)
print(OS.find_keycode_from_string("Escape")) # Prints 4194305 (KEY_ESCAPE)
print(OS.find_keycode_from_string("Shift+Tab")) # Prints 37748738 (KEY_MASK_SHIFT | KEY_TAB)
print(OS.find_keycode_from_string("Unknown")) # Prints 0 (KEY_NONE)
S3.Print(OS.FindKeycodeFromString("C")); // Prints C (Key.C)
S3.Print(OS.FindKeycodeFromString("Escape")); // Prints Escape (Key.Escape)
S3.Print(OS.FindKeycodeFromString("Shift+Tab")); // Prints 37748738 (KeyModifierMask.MaskShift | Key.Tab)
S3.Print(OS.FindKeycodeFromString("Unknown")); // Prints None (Key.None)
另请参阅get_keycode_string()。
String get_cache_dir() const 🔗
根据操作系统的标准返回全局缓存数据目录。
在Linux/BSD平台上,可以通过在启动项目之前设置XDG_CACHE_HOME环境变量来覆盖此路径。有关更多信息,请参阅文档中的i3D项目中的文件路径。另请参阅get_config_dir()和get_data_dir()。
不要与get_user_data_dir()混淆,后者返回特定于项目的用户数据通路。
PackedStringArray get_cmdline_args() 🔗
返回传递给引擎的命令行参数。
命令行参数可以以任何形式编写,包括--key value和--key=value形式,以便它们可以被正确解析,只要自定义命令行参数不与引擎参数冲突。
您还可以使用get_environment()方法合并环境变量。
您可以设置ProjectSettings.editor/run/main_run_args来定义运行项目时编辑器要传递的命令行参数。
示例:对参数使用--key=value将命令行参数解析为Dictionary:
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("--")] = "";
}
}
注意:不建议直接传递自定义用户参数,因为引擎可能会丢弃或修改它们。相反,请使用标准的UNIX双破折号(--),然后传递自定义参数,引擎会自动忽略这些参数。这些参数可以通过get_cmdline_user_args()读取。
PackedStringArray get_cmdline_user_args() 🔗
返回传递给引擎的命令行用户参数。用户参数被引擎忽略,仅供用户使用。它们在双破折号--参数之后传递。当--被其他程序(如startx)拦截时,可以使用++。
# i3D has been executed with the following command:
# i3d --fullscreen -- --level=2 --hardcore
OS.get_cmdline_args() # Returns ["--fullscreen", "--level=2", "--hardcore"]
OS.get_cmdline_user_args() # Returns ["--level=2", "--hardcore"]
请使用get_cmdline_args()获取传递的所有参数。
String get_config_dir() const 🔗
根据操作系统的标准返回全局用户配置目录。
在Linux/BSD平台上,可以通过在启动项目之前设置XDG_CONFIG_HOME环境变量来覆盖此路径。有关更多信息,请参阅文档中的i3D项目中的文件路径。另请参阅get_cache_dir()和get_data_dir()。
不要与get_user_data_dir()混淆,后者返回特定于项目的用户数据通路。
PackedStringArray get_connected_midi_inputs() 🔗
返回连接的MIDI设备名称的数组(如果存在)。如果系统MIDI驱动程序以前没有使用open_midi_inputs()初始化,则返回一个空数组。另请参见close_midi_inputs()。
注意:此方法在Linux、macOS、Windows和Web上实现。
注:在Web平台上,Web MIDI需要浏览器支持。就目前而言目前所有主流浏览器都支持,Safari除外。
注意:在Web平台上,使用MIDI输入需要先授予浏览器权限,此权限请求在调用open_midi_inputs()时执行,浏览器会克制处理MIDI输入,直到用户接受权限请求。
根据操作系统的标准返回全局用户数据目录。
在Linux/BSD平台上,可以通过在启动项目之前设置XDG_DATA_HOME环境变量来覆盖此路径。有关更多信息,请参阅文档中的i3D项目中的文件路径。另请参阅get_cache_dir()和get_config_dir()。
不要与get_user_data_dir()混淆,后者返回特定于项目的用户数据通路。
String get_distribution_name() const 🔗
返回Linux和BSD平台的发行版名称(例如Ubuntu、Manjaro、OpenBSD等)。
返回与Android ROM的get_name()相同的值,但尝试返回流行的Android衍生产品(如LineageOS)的自定义ROM名称。
返回与其他平台的get_name()相同的值。
注意:Web平台不支持此方法。它返回一个空字符串。
PackedByteArray get_entropy(size: int) 🔗
生成具有给定size的加密安全随机字节的PackedByteArray。
注意:使用此方法生成大量字节可能会导致大多数平台上质量较低的锁定和熵。在大多数情况下,首选使用Crypto.generate_random_bytes()。
String get_environment(variable: String) const 🔗
返回给定环境变量的值,如果variable不存在,则返回空字符串。
注意:仔细检查variable的大小写。环境变量名称在除Windows之外的所有平台上都区分大小写。
注意:在macOS上,应用程序无法访问shell环境变量。
String get_executable_path() const 🔗
返回当前引擎可执行文件的文件路径。
注意:在macOS上,如果要启动另一个i3D实例,请始终使用create_instance()而不是依赖可执行路径。
PackedStringArray get_granted_permissions() const 🔗
在Android设备上:返回已授予的危险权限列表。
在macOS上:返回应用程序可访问的用户选择文件夹列表(仅限沙盒应用程序)。使用本机文件对话框请求文件夹门禁权限。
String get_keycode_string(code: Key) const 🔗
将给定的keycode作为 String 返回。
print(OS.get_keycode_string(KEY_C)) # Prints "C"
print(OS.get_keycode_string(KEY_ESCAPE)) # Prints "Escape"
print(OS.get_keycode_string(KEY_MASK_SHIFT | KEY_TAB)) # Prints "Shift+Tab"
S3.Print(OS.GetKeycodeString(Key.C)); // Prints "C"
S3.Print(OS.GetKeycodeString(Key.Escape)); // Prints "Escape"
S3.Print(OS.GetKeycodeString((Key)KeyModifierMask.MaskShift | Key.Tab)); // Prints "Shift+Tab"
另请参阅find_keycode_from_string()、InputEventKey.keycode和InputEventKey.get_keycode_with_modifiers()。
以language_Script_COUNTRY_VARIANT@extra形式的String返回主机操作系统区域设置。语言之后的每个子字符串都是可选的,可能不存在。
-语言-2或3个字母的语言代码,小写。
-Script-4个字母的脚本代码,在标题大小写中。
-COUNTRY-2或3个字母的国家代码,大写。
-VARIANT-语言变体、区域和排序顺序。变体可以有任意数量的下划线关键字。
-额外的-分号分隔的附加关键词列表。这可能包括货币、日历、排序顺序和编号系统信息。
如果只需要语言代码而不需要操作系统中完全指定的语言环境,可以使用get_locale_language()。
String get_locale_language() const 🔗
返回主机操作系统语言环境的2或3个字母的语言代码作为字符串,在所有平台上应该是一致的。这相当于提取get_locale()字符串的语言部分。
当您不需要有关国家代码或变体的附加信息时,这可用于将完全指定的语言环境字符串缩小到仅“通用”语言代码。例如,对于具有fr_CA语言环境的法裔加拿大用户,这将返回fr。
int get_main_thread_id() const 🔗
返回主线程的ID。请参见get_thread_caller_id()。
注意:线程ID不是确定性的,可以在应用程序重新启动时重复使用。
Dictionary get_memory_info() const 🔗
返回一个Dictionary,其中包含有关当前内存的信息,并包含以下条目:
-"物理"-可用物理内存的总量(以字节为单位)。此值可能略小于实际物理内存量,因为它不包括内核和设备保留的内存。
-"free"-无需磁盘访问或其他昂贵操作即可立即分配的物理内存量,以字节为单位。该进程可能能够分配更多物理内存,但此操作需要将非活动页面移动到磁盘,这可能很昂贵。
-"可用"-无需扩展交换文件即可分配的内存量,以字节为单位。此值包括物理内存和交换。
-"ack"-当前线程堆栈的大小(以字节为单位)。
注意:如果未知,每个条目的值可能是-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":
S3.Print("Welcome to Windows");
break;
case "macOS":
S3.Print("Welcome to macOS!");
break;
case "Linux":
case "FreeBSD":
case "NetBSD":
case "OpenBSD":
case "BSD":
S3.Print("Welcome to Linux/BSD!");
break;
case "Android":
S3.Print("Welcome to Android!");
break;
case "iOS":
S3.Print("Welcome to iOS!");
break;
case "Web":
S3.Print("Welcome to the Web!");
break;
}
注意:在Web平台上,仍然可以通过特性标签来确定主机平台的操作系统。请参阅has_feature()。
int get_process_exit_code(pid: int) const 🔗
返回生成的进程完成运行后的退出代码(参见is_process_running())。
返回-1如果pid不是生成子进程的PID,则该进程仍在运行,或者该方法未针对当前平台实现。
注意:如果pid是macOS捆绑的应用程序进程,则返回-1。
注意:此方法在Android、Linux、macOS和Windows上实现。
返回主机用于唯一标识此应用程序的编号。
注意:此方法在Android、iOS、Linux、macOS和Windows上实现。
int get_processor_count() const 🔗
返回主机上可用的逻辑CPU内核的数量。在启用超线程的CPU上,此数字将大于物理CPU内核的数量。
String get_processor_name() const 🔗
返回主机上CPU型号的全称(例如"Intel(R)Core(TM)i7-6700KCPU@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 🔗
返回标准错误设备的类型。
StdHandleType get_stdin_type() const 🔗
返回标准输入设备的类型。
StdHandleType get_stdout_type() const 🔗
返回标准输出设备的类型。
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和样式的系统字体文件的路径。如果没有找到匹配的字体,则返回一个空字符串。
以下别名可用于请求默认字体:“无衬线”、“衬线”、“等宽”、“草书”和“幻想”。
注意:如果请求的样式不可用,返回的字体可能具有不同的样式。
注意:此方法在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和样式的字体。如果未找到匹配的字体,则返回一个空数组。
以下别名可用于请求默认字体:“无衬线”、“衬线”、“等宽”、“草书”和“幻想”。
注意:根据操作系统,不能保证任何返回的字体都适合呈现指定的文本。字体应按照返回顺序加载和检查,并使用第一个合适的字体。
注意:如果请求的样式不可用或属于不同的字体系列,则返回的字体可能具有不同的样式。
注意:此方法在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 🔗
返回用户数据写入的绝对目录路径(i3D中的user://目录)。路径取决于项目名称和ProjectSettings.application/config/use_custom_user_dir.
在Windows上,这是
%AppData%\i3D\app_userdata\[project_name],或者%AppData%\[custom_name],如果use_custom_user_dir被设置。%AppData%扩展为%UserProfile%\AppData\Roaming。在macOS上,这是
~/Library/Application Support/i3D/app_userdata/[project_name],或者~/Library/Application Support/[custom_name],如果use_custom_user_dir被设置。在Linux和BSD上,这是
~/.local/share/i3d/app_userdata/[project_name],或~/.local/share/[custom_name],如果use_custom_user_dir被设置。在Android和iOS上,这是一个沙盒目录,位于内部或外部存储,取决于用户的配置。
在Web上,这是一个由浏览器管理的虚拟目录。
如果项目名为空,[project_name]将回退到[project_name]。
不要与get_data_dir()混淆,该方法返回全局(非项目特定的)用户主目录。
返回操作系统的确切生产和构建版本。这与营销中使用的品牌版本不同。这有助于区分操作系统的不同版本,包括次要版本,内部和自定义构建。
-对于Windows,返回主要版本和次要版本,以及内部版本号。例如,返回的字符串可能看起来像Windows 10版本的10.0.9926,而对于Windows 7 SP1版本,它可能看起来像6.1.7601。
-对于滚动发行版,如ArchLinux,返回一个空字符串。
-对于macOS和iOS,返回主要和次要版本,以及补丁号。
-对于Android,返回SDK版本和增量内部版本号。如果它是自定义ROM,它会尝试返回其版本。
注意:Web平台不支持此方法。它返回一个空字符串。
String get_version_alias() const 🔗
返回营销中使用的品牌版本,后跟内部版本号(在Windows上)或版本号(在macOS上)。示例包括11(build 22000)和Sequoia(15.0.0)。然后可以将此值附加到get_name()以获取操作系统的完整、人类可读的操作系统名称和版本组合。生成的字符串中不包含诸如24H2之类的Windows功能更新,但Windows Server被识别为此类(例如2025(build 26100)for Windows Server 2025)。
注意:此方法仅在Windows和macOS上受支持,在其他操作系统上,它返回与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上支持,当不在无头模式下运行时。在其他平台上,它返回一个空数组。
bool has_environment(variable: String) const 🔗
如果名称为variable的环境变量存在,则返回true。
注意:仔细检查variable的大小写。环境变量名称在除Windows之外的所有平台上都区分大小写。
bool has_feature(tag_name: String) const 🔗
返回true,如果当前运行的实例支持给定功能标签的功能,具体取决于平台、构建等。可用于检查您当前是否正在运行调试构建、在某个平台或arch等。
注意:标签名称区分大小写。
注:在Web平台上,定义了以下附加标签之一来指示主机平台:web_android,web_ios,web_linuxbsd,web_macos,或web_windows。
如果用于运行项目的i3D二进制文件是调试导出模板,或者在编辑器中运行时,则返回true。
如果用于运行项目的i3D二进制文件是发布导出模板,则返回false。
注意:要检查用于运行项目的i3D二进制文件是否是导出模板(调试或发布),请使用OS.has_feature("模板")代替。
bool is_keycode_unicode(code: int) const 🔗
如果输入的keycode对应于一个Unicode字符,则返回true。有关代码列表,请参阅Key常量。
print(OS.is_keycode_unicode(KEY_G)) # Prints true
print(OS.is_keycode_unicode(KEY_KP_4)) # Prints true
print(OS.is_keycode_unicode(KEY_TAB)) # Prints false
print(OS.is_keycode_unicode(KEY_ESCAPE)) # Prints false
S3.Print(OS.IsKeycodeUnicode((long)Key.G)); // Prints True
S3.Print(OS.IsKeycodeUnicode((long)Key.Kp4)); // Prints True
S3.Print(OS.IsKeycodeUnicode((long)Key.Tab)); // Prints False
S3.Print(OS.IsKeycodeUnicode((long)Key.Escape)); // Prints 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 🔗
返回true,如果引擎是使用--verose或-v命令行参数执行的,或者ProjectSettings.debug/settings/stdout/verbose_stdout是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驱动程序的单例,允许i3D接收InputEventMIDI。另请参见get_connected_midi_inputs()和close_midi_inputs()。
注意:此方法在Linux、macOS、Windows和Web上实现。
注:在Web平台上,Web MIDI需要浏览器支持。就目前而言目前所有主流浏览器都支持,Safari除外。
注意:在Web平台上,使用MIDI输入需要先授予浏览器权限,此权限请求在调用open_midi_inputs()时执行,浏览器会克制处理MIDI输入,直到用户接受权限请求。
PackedByteArray read_buffer_from_stdin(buffer_size: int) 🔗
从标准输入中读取用户输入作为原始数据。此操作可能是阻塞,如果在主线程上调用read_string_from_stdin(),则会导致窗口冻结。
-如果标准输入是控制台,则此方法将阻塞,直到程序收到标准输入中的换行符(通常由用户按Enter)。
-如果标准输入是管道,则此方法将阻塞,直到读取特定数量的数据或关闭管道。
-如果标准输入是文件,此方法将读取特定数量的数据(如果到达文件末尾,则更少)并立即返回。
注意:此方法在Linux、macOS和Windows上实现。
注意:在导出的Windows版本上,运行控制台包装器可执行文件以访问终端。如果标准输入是控制台,则在没有控制台包装的情况下调用此方法将永久冻结。如果标准输入是管道或文件,则可以在没有控制台包装器的情况下使用。如果您需要具有完整控制台支持的单个可执行文件,请使用使用windows_subsystem=控制台标志编译的自定义版本。
String read_string_from_stdin(buffer_size: int) 🔗
从标准输入中读取用户输入的UTF-8编码字符串。这项操作可以被阻塞,如果在主线程上调用read_string_from_stdin(),则会导致窗口冻结。
如果标准输入是控制台,则该方法将阻塞,直到程序在标准输入中收到换行符(通常是用户按下Enter键)为止。
注意:此方法会自动将\r\n换行符替换为\n,并从字符串末尾删除它们。使用read_buffer_from_stdin()读取未处理的数据。
注意:此方法在Linux、macOS和Windows上实现。
注意:在导出的Windows构建中,运行控制台包装器可执行文件以访问终端。如果标准输入是控制台,则在没有控制台包装的情况下调用此方法会永久冻结。如果标准输入是管道或文件,则无需控制台包装器即可使用。如果需要一个带有完整控制台支持的单一可执行文件,请使用带有windows_subsystem=console标志的自定义构建。
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")
注意:导出时必须检查权限。
注意:此方法仅在Android上实现。
从操作系统请求危险的权限。如果已经授予权限,则返回true。另请参阅MainLoop.on_request_permissions_result。
注意:导出时必须检查权限。
注意:此方法仅在Android上实现。在Android应用程序中,正常权限会在安装时自动授予。
void revoke_granted_permissions() 🔗
在macOS(仅限沙盒应用程序)上,此功能会清除应用程序可访问的用户选择文件夹列表。
void set_environment(variable: String, value: String) const 🔗
将环境变量variable的值设置为value。环境变量将为i3D进程和运行set_environment()后使用execute()执行的任何进程设置。环境变量将不持续到i3D进程终止后运行的进程。
注意:环境变量名称在除Windows之外的所有平台上都区分大小写。variable名称不能为空或包含=字符。在Windows上,将在环境块中注册的variable、value、=和空终止符字符的组合长度限制为32767个字符。
void set_restart_on_exit(restart: bool, arguments: PackedStringArray = PackedStringArray()) 🔗
如果restart为true,则在项目退出时使用SceneTree.quit()或Item.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,则打开文件进行写入时,将使用临时文件代替它。关闭时,它会自动应用于目标文件。
当文件可能被其他应用程序(例如防病毒、文本编辑器甚至i3D编辑器本身)打开时,这很有用。
Error shell_open(uri: String) 🔗
请求操作系统使用最合适的程序打开由uri标识的资源。例如:
OS.shell_open("C:\Users\name\Downloads")在Windows上打开用户的下载文件夹。OS.shell_open("C:/Users/name/Downloads")在Windows上也有效,打开用户的下载文件夹。OS.shell_open("https://i3yoo.cn")用默认浏览器打开i3D官方网站。OS.shell_open("mailto:example@example.com")打开默认的电子邮件客户端,并将“收件人”字段设置为“example@example.com”。请参阅RFC 2368 -mailtoURL scheme,了解可添加的字段列表。使用ProjectSettings.globalize_path()将res://或user://项目路径转换为系统路径,以便使用此方法。注意:使用String.uri_encode()以URL安全、安全的方式对URL中的字符号进行编码。这对于换行符来说尤其重要。否则,shell_open()在导出到Web平台的项目中可能无法正常工作。注意:此方法已在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上实现,在其他平台上,它会回退到shell_open(),目录路径为file_or_dir_path,前缀为file://。
void unset_environment(variable: String) const 🔗
从当前环境中删除给定的环境变量(如果存在)。variable名称不能为空或包含=字符。对于i3D进程和运行unset_environment()后使用execute()执行的任何进程,环境变量将被删除。环境变量的删除将不会持续到i3D进程终止后运行的进程。
注意:环境变量名在除Windows之外的所有平台上都区分大小写。