通过使用函数RegisterSubsystem(),任何对象都可以作为子系统注册到上下文中。然后,通过调用GetSubsystem(),同一上下文中的任何其他对象都可以访问它们。每个对象类型只能有一个实例作为子系统存在。
发动机初始化后,以下子系统将始终存在:
- Time:管理帧更新、帧数和经过时间计数,并控制操作系统低分辨率计时器的频率。
- WorkQueue:在工作线程中执行后台任务。
- FileSystem:提供目录操作。
- Log:提供日志记录服务。
- ResourceCache:加载资源并保持缓存以供以后访问。
- NetWork:提供UDP网络和场景复制。
- Input:处理键盘和鼠标输入。将在无头模式下处于非活动状态。
- UI:图形用户界面。将在无头模式下处于非活动状态。
- Audio:提供声音输出。如果禁用声音,则将处于非活动状态。
- Engine:创建其他子系统并控制主循环迭代和帧速率限制。
以下子系统是可选的,因此如果尚未创建,GetSubsystem()可能返回null:
- Profiler:使用操作系统性能计数器提供分层函数执行时间测量。如果在中编译了评测,则存在(可从根CMakeLists.txt配置)
- EventProfiler:与事件探查器相同。
- Graphics:管理应用程序窗口、渲染上下文和资源。如果不处于无头模式,则存在。
- Renderer:在3D中渲染场景并管理渲染质量设置。如果不处于无头模式,则存在。
- Script:提供AngelScript执行环境。需要手动创建和注册。
- Console::提供交互式AngelScript控制台和日志显示。通过调用CreateConsole()创建。
- DebugHud:显示渲染模式信息、统计信息和分析数据。通过调用CreateDebugHud()创建。
- Database:管理数据库连接。在构建库时,需要启用数据库支持的构建选项。
在脚本中,子系统通过以下全局财产可用:Time、fileSystem、log、缓存、网络、输入、ui、音频、引擎、图形、渲染器、脚本、控制台、debugHud、数据库。请注意,由于WorkQueue和Profiler的低级性质,它们不可用于脚本。