1. 创建第一个Omniverse Kit扩展

创建第一个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 后执行以下检查:

  1. 菜单栏出现“Hello World”菜单项;
  2. 点击“Print Hello”后,Kit 日志(终端或 Log 窗口)中显示 Hello World 字符串;
  3. 扩展卸载(如禁用扩展)后,菜单项消失且无报错。

满足以上三点即判定扩展实现正确。

关键说明

本扩展仅实现菜单按钮与打印功能,不涉及其他 UI 窗口或业务逻辑。若 Kit 版本 API 有差异,omni.kit.ui.get_editor_window() 可能需替换为 omni.kit.app.get_app().get_main_window() 等对应接口,但整体结构不变。

Kit 扩展加载与交互时序 Kit 应用 扩展管理器 HelloWorld 扩展 菜单栏 日志/控制台 加载 on_startup add_menu 点击菜单项 print