1. 创建第一个Omniverse Kit扩展
任务说明
本案例目标是在 Omniverse Kit 中创建一个最小可加载的扩展,该扩展在菜单栏添加一个按钮,点击按钮后在日志中打印“Hello World”。你需要完成扩展的 Python 代码、配置文件,并了解如何加载与验证。
实现方案
Omniverse Kit 扩展本质是一个包含 extension.toml 配置和 Python 入口的目录。我们创建 hello_world_extension 目录,其中包含扩展元数据与 UI 逻辑。扩展通过 Kit 的 omni.ui 模块在菜单栏注册按钮,点击时调用 print("Hello World")。
文件结构与代码
创建以下两个文件:
1. hello_world_extension/extension.toml
[package]
name = "hello_world_extension"
version = "0.1.0"
description = "A minimal extension that adds a menu button printing Hello World"
[python]
extra_paths = []
2. hello_world_extension/hello_world_extension.py
import omni.ext
import omni.ui as ui
import omni.kit.app
class HelloWorldExtension(omni.ext.IExt):
def on_startup(self, ext_id):
"""注册菜单按钮"""
editor_menu = omni.kit.app.get_app().get_extension_manager()
# 获取主窗口菜单栏
window = omni.kit.ui.get_editor_window()
menu_bar = window.menu_bar
# 在“Extensions”菜单下添加子菜单项
self._menu = menu_bar.add_menu("Hello World")
self._menu.add_item(ui.MenuItem("Print Hello", on_click=self._on_print))
def _on_print(self):
"""点击回调:打印 Hello World"""
print("Hello World")
def on_shutdown(self):
"""清理菜单"""
if self._menu:
self._menu.clear()
self._menu = None
加载与运行
将 hello_world_extension 目录放入 Omniverse Kit 的扩展搜索路径(如 kit/exts 或通过 --ext-folder 指定)。启动 Kit 应用后,在菜单栏会出现“Hello World”菜单,点击其中的“Print Hello”项,控制台/日志窗口会输出 Hello World。
验证方法
启动 Kit 后执行以下检查:
- 菜单栏出现“Hello World”菜单项;
- 点击“Print Hello”后,Kit 日志(终端或 Log 窗口)中显示
Hello World字符串; - 扩展卸载(如禁用扩展)后,菜单项消失且无报错。
满足以上三点即判定扩展实现正确。
关键说明
本扩展仅实现菜单按钮与打印功能,不涉及其他 UI 窗口或业务逻辑。若 Kit 版本 API 有差异,omni.kit.ui.get_editor_window() 可能需替换为 omni.kit.app.get_app().get_main_window() 等对应接口,但整体结构不变。