PyCharmでUE4 Python 

## 概要
UnrealEngine4用 Pythonのコード作成にPyCharmを利用したいときのドキュメントとなります

- コード補完がとりあえずできればOK
- PyCharm上でデバッグまでやりたい

以上を説明いたします


### UE4 Python Editor Script Plugin
UE4 Python APIはこちら
https://docs.unrealengine.com/en-US/PythonAPI/index.html
2020/07/29時点でベータです
名前の通りEditor用で、自動処理をさせるのに便利です

### PyCharm
JetBrains製 Python開発統合環境です
https://www.jetbrains.com/pycharm/
このドキュメントはPyCharm Proでの手順となります

## 準備

### Pythonプラグイン インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/261ae700-9c27-e5de-aec9-ce575345b767.png)
UE4再起動

### Python Stub ファイル作成 (unreal.py)
コード補完のためのファイルを作成します
Developer Modeにチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/8335ed47-104e-1615-c1ef-bcfc6b427010.png)

私の場合はこの状態で再起動することによって Python Stubファイルが生成されました
Compileしても作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/000520af-7719-3f48-9ee3-989868729d78.png)
出来た場所がログに表示されていますね

### PyCharmでの設定
UE4 PythonはVersion2なので、Interpreterを変更します
Python実行はUE4内になります
ここでのInterpreterの設定は主にコード補完のためだけの意味合いが強いです。

### UE4でPython実行
UE4からのPython起動方法は Output Logからファイル名指定の方法を前提に説明していきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/b5d7a6c5-c9da-1111-f3fc-c40c0466d7c9.png)
```Enter Python script or filename to execute```
のところにフルパスを入力で実行できます

## PyCharmとの連携①　お手軽にコード補完
お手軽にコード補完ができるようになるまで

先ほど生成された unreal.pyをPythonプロジェクトにコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/403e363f-ce22-632d-32fd-9e01fc76cc5c.png)
以上です

- PyCharmがコード補完用インデックス作成をやめてしまう
    - unreal.pyは12MByteを超えます
    - [こちら](https://forums.unrealengine.com/development-discussion/python-scripting/1633549-unreal-module-via-pycharm)にあるように、Pycharmの読み込みサイズ制限を解除します

- 生成場所のunreal.pyを利用する
    - PyCharm interpreterの設定で、unreal.pyが生成される場所を指定します [(参考)](https://forums.unrealengine.com/development-discussion/python-scripting/1545347-how-do-you-get-auto-completion-and-stuff?p=1571620#post1571620
)
    - Python用関数をC++で作成すると、unreal.pyも更新されますが、そのファイルがすぐ読み込めて便利です

## PyCharmとの連携②　デバッグ可能
こちらを参考にしました🙏
http://guillaumepastor.com/programming/debug-unreal-engine-python-using-pycharm/
こちらの内容ままです
PyCharm Pro 2020.2にアップデートした説明します

### UE4で実行、Pycharmでデバッグ
- PyCharmがサーバー
- UE4がクライアント
となるよう設定していきます
アンチウィルスソフトのセーフリストにいれたり、アプリのネットワーク接続許可といったセキュリティ設定が必要となるかもしれません

### PyCharm側設定（サーバー）
![Run_Debug Configurations 2020-07-30 09.03.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/ef124848-ba37-3b7b-ba11-adb189362eb6.png)

1. +ボタンをおして実行環境を追加します　「Python Debug Server」を選択
2. Name: お好みでわかりやすい名前を
3. IDE host name: localhosot、Portを60058に設定　のちにUE4からの接続ポートになります
4. Suspend after connectのチェックを外す
1. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/ea0ec707-ff9f-b55c-937d-1c95ef219e1d.png)
5. 実行環境を先ほどの名前のものを選ぶ
6. 虫ボタン![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/7bad2493-85d7-8303-3a6d-85948b0d0447.png)
を押す
1. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/18e6d525-66f2-7ced-c3b8-d3bf431d38d0.png)
7. 実行モードになります
8. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/4217807e-c3c5-f2c6-247a-de48143bc9ae.png)

PyCharm側スタンバイできました

### UE4側

1. [参考サイト](http://guillaumepastor.com/programming/debug-unreal-engine-python-using-pycharm/)、4.Attach to the debugger in Unrealにあるコードをテキストに保存します attach_to_debugger.pyとしましょうか
2. このファイルの ```pydev_path = "D:/PyCharm/PyCharm 2018.3.4/helpers/pydev"```を書き換えます
    - PyCharmインストールディレクトリから python/helpers/pydev　ディレクトリを探してください 
    - Windows環境 JetBrains Toolboxで PyCharm Pro 2020.2インストールした私の場合は ```"C:/Users/ユーザー名/AppData/Local/JetBrains/Toolbox/apps/PyCharm-P/ch-0/202.6397.98/plugins/python/helpers/pydev"```　となりました
3. UE4 で attach_to_debugger.pyを実行
4. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350704/cbd243eb-73c7-b54e-6e78-3ae49f91de81.png)
5. 接続されました！

### 注意点
- 参考サイトにもある通り、UE4オブジェクトの中身は見ることができません
- デバッグ接続が一旦きれたあと、再接続してもブレークポイントが効かないようです
    - 対処として、UE4を再起動しています（要検証）

## 所感
PyCharmから実行できるようになるといいですね
個人的に、コンパイルのいらないスクリプトでブレークポイントが効くのはテンションがめっちゃあがります