Unity + Python 环境搭建
兴趣转移到了研究 Shader,找了各种资料,人手推荐冯大佬的《Unity Shader 入门精要》。在我还是一只菜鸡的情况下,完全做不到各种 shading language 切换自如,当然是大佬用啥我用啥。我同事痛心疾首质问我为何不去学 Unreal Engine 时我的回答。
背景
在:
-> “创建 GameObject 并重命名”
-> “创建 Material 并重命名”
-> “创建 Shader 并重命名”
-> “把 Shader 指给 Material”
-> “把 Material 赋给 GameObject”
重复了三遍之后,作为一名Pipeline TD,根本就不能忍了,必须搞个工具一键完成上述步骤。
搜索 “Unity 插件开发”,emmm,C#?JavaScript?Boo?
C# 是不可能的,这辈子都不会去学 C# 的。
JS 嘛,想想我那 ugly 的前端代码,还是算了。
Boo 你是什么鬼?
这是瞧不起我大 Python 吗?
抱着试试看的心态搜索“Unity Python”,嚯!看我发现了什么,Unity 官方支持Python了
https://docs.unity3d.com/Packages/com.unity.scripting.python@2.0/manual/
读完文档非常兴奋,这是官方专门为媒体娱乐行业(当然包括影视后期啦)无缝对接 Pipeline 量身打造,哇哦!简直就是在艾特我!苍蝇搓手中......但,额,怎么开始啊??
官方你敢把文档写全吗?能别把环境搭建藏在论坛的犄角旮旯里吗?浪费了大好青春终于拼凑出来......
https://forum.unity.com/threads/introducing-python-for-unity-editor.812748/
注意
Unity 版本必须 2019.3 及以上
Python 仅支持 2.7,并需要自行安装
Windows 的话系统要求是Win 10, 1803 以及以上
目前(2020/03/28)并不支持 Python 3,是考虑到影视后期行业目前还是大规模的 Python 2.7,且换 Python 3 喊了几年都没动静的事实上做的决定,但 Python 3的支持已经安排上了。如果你的电脑安装了Python 3,请将其从 PATH 中移除,否则可能会引起 Unity 崩溃。
安装
找到你工程中的 .../Packages/mainifest.json文件,在 dependencies 中加上 "com.unity.scripting.python": "2.0.1-preview.2",
你的 Unity 软件chua chua chua 就开始安装然后安装好了。
在菜单 Edit > Project Settings 中左栏就可以看到 Python for Unity 项,在页面中会显示当前的各种版本信息以及识别到你系统里的 Python
确定都没问题了昂。
Hello World - 1
Unity 中有两种执行 Python的方式,这不得不说跟达芬奇的尿性一模一样。
一种可以直接在软件内,开启 Python Console,就可以直接敲代码,脏乱差的工作都已经自动做好了,适合无需界面无需存储状态的工具,以及就是想先测试核心代码。
目前这个里面编辑器相当简陋,无代码高亮、补全,甚至最基本的代码写错了,都不会有报错提示的......
先试一下:执行菜单 Windows > General > Python Console,在下面的那个文本框中输入
import UnityEngine
print 'Hello World'
UnityEngine.Debug.Log('Hello World')
然后点击 Excute 即可看到输出框中输出了"Hello World"。

这里跟行业其他 DCC 软件的 Script Editor 非常像,比如,ctrl + enter 即可执行全部代码;选中部分代码,然后 ctrl+ enter 即可执行选中的代码。
Hello World - 2
第二种方式,适合搞起复杂工具,花哨 PySide 界面的那种,运行于 Unity 之外的。原理跟达芬奇的一样,启动 Unity 的时候,会悄咪咪启动一个子进程服务监听,然后你跟他通信这样。
我本人使用 PyCharm 作为主 IDE,所以就以它为例,为啥不用 VS Code? 因为我 PyCharm 是花钱买的。
新建一个工程,并且在 Project Structure 中添加 .../Library/PackageCache/com.unity.scripting.python@2.0.1-preview.2/Python/site-packages 这个路径,其实就是将 Unity 相关的模块加到 PYTHONPATH 的意思。
新建一个文件,输入以下内容,然后运行
service = unity_client.UnityClientService()
connect = unity_client.connect(service)
geo = service.UnityEngine.GameObject.CreatePrimitive(service.UnityEngine.PrimitiveType.Cylinder)
geo.name = "myCylinder"
# connect.close()
即可看到 Unity 场景中创建了个名字叫 myCylinder 的 Cylinder。
此时 Python 并没有退出,如果你想执行完就拍拍屁股走人,把上述最后一行去掉 # 即可,这里不展开说这是咋回事儿了。
今天作为一个环境搭建说明,已经够了,后续如何添加菜单,如何让Unity 去通知你的代码等等有机会再说。
这里有我的示例代码:https://github.com/muyr/hello_unity
文档
Python API 的文档何在?
抱歉现在没有,感觉将来也不会有......它完全是 C# API 的移植,所以,你就去参考 C# 的 API 文档吧,

B站专栏不适合写有代码的技术文章,我精心排版的 Markdown 优雅卷面完全没了,还是需要放简书一份。
欢迎关注我的公众号“真的起名无力”
