🐍

Python for UnityでPy3する

2021/08/15に公開

俗にいうDCCツール、Unityなどのゲームエンジンや3DCG制作ツール等では、去年の中ほどからPy3の流れが表面化してきましたがまだまだ2系が広く使われ、今日明日にも移行が済むという状況でもありません。

とはいえPy3互換性トラッカー▼によると多くがグリーンランプになってきており、
VFXpy Python 3 Compatibility Tracker
バトンは現場の頑張り側に移っている感じでしょうか。

Unityの現状

20210815時点では、上記サイトで確認してみると2.7に対応済み、
py3は 「closed beta」 と表記されています。

しかしこの表記も古いようで、公式マニュアルにはpy3に対応した4.0.0-exp.5というバージョンが公開されています。

https://docs.unity3d.com/Packages/com.unity.scripting.python@4.0/

今回はこれについて扱ってみます。

インストールの前に

Python for Unity は開発者の方(Matjioさん)曰くパッケージマネージャに公開しないことにした(「we have decided to not expose the package in the Unity Package Manager window」)とのことで、上記マニュアルだけ読んでいてもそのあたりがいまいちわかりづらくなっています。そこだけ読んでいてもインストールはできません。

https://forum.unity.com/threads/introducing-python-for-unity-editor.812748/#post-5526181

インストールの方法はMatjioさんがフォーラムに立てた上記スレッドから読み取る必要があります。
ただ、20210815時点でスレッドでは2.0.0-preview.6への言及が最新になっています。
手順的には4.0.0でも通用するようなので、適宜読み替えて作業を進めます。

すなわち

  • 公式マニュアル = 4.0.0-exp.5が最新
    • インストール手順は書かれてない
  • フォーラム = 2.0.0-preview.6までしか書かれてない

という捻じれが発生しており、正直この前提を把握するのが一番の手間です笑
4.0.0が正式版になるころにはクリアになるということなのかもしれません。

また、4.0.0に限らずPython for Unity自体がPreviewなパッケージです。
使用の際にはその点含みおきください。

インストール

Installation Requirements によると、対応しているUnityのバージョンとして「Unity 2020.1」と記載されています。
Unity Hub で確認すると2020系は2020.3となっているので、それを使用します。

適当にプロジェクトを作成(ここでは「tk-unity」というプロジェクト名になっています)して、パッケージマネージャを確認すると、

このように、Python for Unityがあってほしい辺りに見つかりません。

manifest.json に記入

当該プロジェクトのPackageフォルダへ移動し、manifest.jsonを開きます。

そして下記の内容をよきところに書き足します。

manifest
"com.unity.scripting.python": "4.0.0-exp.5"

4.0.0-exp.5 の箇所は、使いたいパッケージバージョンに置き換えてください。
(本稿執筆時点でexpではない最新バージョンは2.1.1-preview.1。このバージョンはpy3非対応とのことです)

起動

manifestファイルを書き換えた上でプロジェクトを起動すると、
なにかしらのダウンロードとインポートが走ります。


▼来ました!

パッケージ用python.exe

パッケージの使用するpython.exeは、LibraryフォルダのPythonInstall以下に置かれます。
バージョンは3.7.9でした。VESの勧告だと2021が3.7.x、2022が3.9.xなので、そのうち変わるでしょう。

一式ダウンロードされるので、PythonInstallフォルダには約500MBほどのファイル群が置かれます。

機能を確認する

Powershellを起動してpip install

このパッケージが使用するPythonへpip installするために、Unity上からシェルが立ち上げられるようになっています。便利。

Project Settings... を開き、
Python for Unityセクションにて「Spawn shell in evironment」します。

pip listしたりpip updateしたり

pyside2やnumpyを入れたり

します。

PySide Example

Python for Unityを有効にした状態でプロジェクトを起動すると、「Python」メニューが自動的に追加され、初期状態では「PySide Example」というツールが登録されています。

PySideを入れていないと動きません。

Python Console (Python Script Editor)

Window > General に「Python Console」が追加されます。
実行すると「Python Script Editor」というパネルが開きます(?)

Pythonスクリプトを記入したり保存、実行したりできます。

サンプル

冒頭で紹介したフォーラムで「Your first Python script:」として紹介されているスクリプトです。

import UnityEngine
print ("I can print using python")
UnityEngine.Debug.Log("hello Unity world")

printの結果はPython Script Editorの上の段(output)に、UnityEngine.Debug.Logの文はUnity本体のConsoleに流れます。

所感

まだexp段階とのことですが、4.0.0ではPython.exeを自前で用意しなくてもよくなっていたり、Unityからshellを立ち上げてpip installできるようになっていたりと利便性が上がっています。
はやく正式版として提供されるようになるといいなと思います。

関連記事

Python for Unity 2.1(202012時点)についてこちらで解説されていました。ご参考ください。

https://qiita.com/tm8r/items/29d598231b793be6c6ea

Discussion