Unity官方此前推出过一个名为 Python Scripting 的扩展包,用于在 Editor 中引入 Python 脚本支持——不过,官方似乎已经停止维护。最近正好有些闲暇时间,我便尝试对该包进行了一系列扩展。
扩展后的插件包地址:Github - Python Scripting
事先声明:Python 并非我的专长,扩展手法未必最优,欢迎指正与交流!
让 Python IDE 获得 Unity/C# API 的智能提示
如果没有 Python 存根(Stubs),在 IDE 中编写 Python 代码时,你会发现代码补全与参数提示全部失效——编辑器仿佛失去了响应。存根的核心作用,是将 Unity 的 C# API 转化为 Python 能够理解的类型信息。对比来看,左侧是开启存根后的效果,右侧则是未启用存根的情况:

新增的 PythonStubsGenerator 类专门负责生成这些存根文件。通过 Unity Editor 菜单栏的 Tools/Python Scripting/Re-Generate Stubs,即可为当前项目中的所有 C# API 批量生成相应的存根。生成的文件默认保存在 文件夹内。
存根生成完毕后,还需在 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 的绘制工作。

在 Python Manager 窗口中,找到 Python Scripting 包,导入 Python Editor Window 示例。之后在 Unity Editor 菜单栏的 Samples/Python Scripting/Editor Window 中即可打开示例窗口。

导入后,相关示例代码位于 Assets/Samples/Python Scripting/ 文件夹中(请记得替换版本号)。

Python 脚本浏览器与执行工具
写好了 Python 工具脚本,自然需要一个方便浏览和执行的入口吧?
新增的 Python Scripts 窗口正是为此场景设计的。通过 Unity Editor 菜单栏的 Tools/Python Scripting/Python Scripts Window 即可打开它。
不过在使用之前,需要先在 Project Settings 中指定 Python 脚本的存放文件夹:

设置完成后,打开 Python Scripts 窗口,所有 Python 脚本便会显示在左侧列表中:

列表的第一项始终是 Script Editor ——选中它,你可以在右侧直接输入 Python 代码,然后点击 Execute 按钮执行。后续项目则对应 Project 中 Python 脚本的目录结构,点击任意脚本即可预览内容,同样支持一键执行。
