当前位置: 首页 > news >正文

使用Python扩展Unity编辑器

Unity官方发布过一个 Python Scripting 包,为Unity Editor增加了Python脚本支持,不过官方似乎已经不再维护这个包了,最近恰好有空,便试着对这个包做了些扩展。

扩展后的插件包地址:Github - Python Scripting

事先声明:我不熟Python,对package的扩展手法不一定最优,欢迎指正!

使Python IDE支持提示Unity/C# API

没有Python Stubs(存根)时,Python IDE在编写Python代码时无法弹出代码补全提示,也没法查看函数参数。

有无存根的对照(左有,右无):

screenshot
新增的 PythonStubsGenerator 类实现了生成Python Stubs的功能。通过Unity Editor菜单项 Tools/Python Scripting/Re-Generate Stubs 可以针对当前项目的所有C# API生成存根。生成的存根文件保存在 <PROJECT_ROOT>/Library/PythonScripting/stubs 文件夹中。

生成存根后,还需要在Python IDE中添加配置。以VSCode为例,需要在Python代码文件夹中创建 .vscode 文件夹,并添加 settings.json 文件,内容如下:

注意:此示例中,Python代码文件夹位于Unity项目根目录中,故使用了相对路径 "../Library/PythonScripting/stubs"

{"python.analysis.extraPaths": ["../Library/PythonScripting/stubs"],"python.analysis.stubPath": "../Library/PythonScripting/stubs","python.analysis.autoSearchPaths": true,"python.analysis.useLibraryCodeForTypes": true,"python.analysis.typeCheckingMode": "basic","python.languageServer": "Pylance"
}

使用Python代码制作Editor Window

放着好好的C#不用,反而去写Python,自然是因为项目大了以后,C#的编译耗时太久了。如果能用Python来编写Editor Window,就可以省去编译时间,再也不用在调整工具窗口内容时苦苦等待了!

新增的 PythonEditorWindow 类定义了一些回调接口,在Python侧注册这些回调,即可调用Unity API完成Editor Window的绘制。

screenshot

在Python Manager窗口中,找到Python Scripting包,导入Python Editor Window示例,然后在Unity Editor菜单项 Samples/Python Scripting/Editor Window 中可以打开示例窗口。

screenshot

导入后的相关示例代码位于 Assets/Samples/Python Scripting/<PYTHON_SCRIPTING_PACKAGE_VERSION>/Python Editor Window/Editor 文件夹中(注意替换版本号)。

screenshot

Python脚本浏览器和执行工具

写好了Python工具脚本后,还需要有一个快捷浏览和执行这些脚本的工具。

新增的 Python Scripts 窗口就是做这个的,它可以通过Unity Editor菜单项 Tools/Python Scripting/Python Scripts Window 打开。

首先需要在Project Settings中设置Python脚本的存放文件夹:

screenshot

然后打开Python Scripts窗口,就可以看到所有Python脚本了:

screenshot

左侧列表的第一个项目永远是 Script Editor ,选中此项时,可以直接在右侧输入Python代码,然后点击 Execute 按钮执行Python代码。

后续项目则对应着Project中Python脚本的目录结构,点击项目项时,可以预览脚本内容,同样可以点击 Execute 按钮执行Python代码。

http://www.dtcms.com/a/393510.html

相关文章:

  • 【Android】自定义控件
  • 探索 Event 框架 6:高级特性与性能优化
  • JavaSE基础——第九章 枚举类注解
  • 云计算在金融领域中的应用
  • 【入门算法】前缀和:先预存再求和,以空间换时间
  • mac编译vst3sdk
  • Java 网络原理(二)--- TCP的机制 + IP协议 +以太网协议 + DNS
  • Python文件名编码处理深度解析:绕过编码问题的专业指南
  • 如何利用简单的浏览器插件Web Scraper爬取知乎评论数据
  • 鹿鼎记豪侠传:Rust 重塑 iOS 江湖(下)
  • 03.博客版-镜像
  • 云原生docker离线二进制安装
  • RabbitMQ 的配置文件位置及常见配置项
  • Visual Prompt Builder-AI 提示词可视化工具
  • 一文掌握Flask:从基础使用到高级应用
  • 23种设计模式之【责任链模式】-核心原理与 Java 实践
  • 执行 conda update -n base -c defaults conda 后仍提示需要升级
  • 学习日报 20250921|NIO
  • 【Linux操作系统】Linux基础指令和权限
  • 谷歌nano banana官方Prompt模板
  • 基于Python大数据的新闻推荐分析
  • ​​[硬件电路-315]:AD7606BSTZ如何测量失调电压?
  • 微服务-分布式追踪 / 监控工具大全
  • The Library: 2靶场渗透
  • 金融知识“厦”乡趣 平安产险厦门分公司启动2025年“金融教育宣传周”活动
  • C++学习笔记——模板初阶
  • Windows 下 WSL2 生态:Ubuntu/Docker Desktop 关系、VLLM 部署差异与性能解析
  • 智能体技术革命:从华为金融智能体FAB看AI智能体的未来发展与行业影响
  • CIKM 2025 | FinCast:用于金融时间序列预测的基础模型
  • 论文解读——矩形隧道中MIMO信道特性的模态理论解释