Unreal Engine4 で公式Pythonを使うまで

# Unreal Engine4 で公式Pythonを使うまで
## 環境
* Windows 10
* Unreal Engine version 4.22

## プラグインの有効化
![edit_plugin.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/44dd3f3e-6a1f-aa1b-ce15-f1e0f3440776.png)

* Python Editor Script Plugin
![plugin.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/5073bfe1-eb00-940b-d8b5-0f5a2ccf3af5.png)

* Editor Scripting Utilities
![ESU.PNG"](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/166ad1e3-6992-eafd-5bf8-bbc9cc419fa3.png)

このプラグインが入っていないと、よく使うEditorAssetLibrary、EditorFilterLibrary、EditorLevelLibrary、およびEditorStaticMeshLibraryが使えない。プラグインのインストール・有効化が必要

プラグインを有効化したあとは必ず、UEを再起動する

## スクリプトの実行結果を表示・実行するためにアウトプットタブを開きます
![output.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/af0a4ee3-0420-67a1-ecb9-c2cb39501470.png)


## サンプルをダウンロード
* https://epicgames.ent.box.com/v/Python-Examples
![download.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/986cca4f-eccd-dce9-7f16-c03d10c20675.png)
* ダウンロードボタンを押す
* c:\epicのフォルダを作ってそこに置きました

## フォルダをリネーム
* 環境によるのかもしれませんが、フォルダ名に空白が入ると実行されなかったので『Basic Examples』と『Unreal Studio Examples』の空白を削ります。『BasicExamples』『UnrealStudioExamples』にリネームします。階層も深かったので、C:\epic\PythonExamples\BasicExamplesでアクセスできるようにしました

## Pythonのコードを実行します
* ファイルを指定して実行

![hello.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/985882ae-e2b6-ab9f-4723-e8abccadf238.png)

* 直接コードを実行

![pythoncode.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135381/0a5e4ec4-6611-eaa4-2572-2f36b97522fe.png)

## 公式サンプル一覧
* [UE4 Python使用方法についての公式ドキュメント](https://docs.unrealengine.com/en-US/Engine/Editor/ScriptingAndAutomation/Python/index.html)　こちらにサンプルの解説があります！

 * Basic Examples

|ファイル名|内容|
|---|---|
|hello_world.py|最も基本なhello_worldをコンソールに表示します。|
|unreal_hello_world.py|hello_world.pyと全く同じ結果となります。最も基本なhello_worldをコンソールに表示しますが、unrealの関数で出力します。|
|edit_property.py|プロパティの編集サンプルです。サンプルとしてメディアプレイヤーのプロパティを変更します。|
|pyside_simpleexample.py|PySideを使用してWindowを表示するサンプルです。事前にpip instalk Pysideをしておかないと動作しません。pip installの方法は後述|
|scoped_editor_transaction.py|スコープトランザクションのサンプル、スコープを使ってまとめてプロパティを変更するサンプルです|
|unreal_object.py|unrealのobjectを作るサンプルです。vectorオブジェクトのサンプルです。vector.pyと同じです。|
|vector.py|vectorオブジェクトのサンプルです。unreal_object.pyと同じです。|

 * Unreal Studio Examples

|ファイル名|内容|
|---|---|
|ContentBrowser\content_browser.py||
|ConvertActors\convert_actors.py||
|DatasmithImport\import_datasmith.py||
|JoinActors\join_actors.py||
|LevelEditing\level_editing.py||
|MergeActors\merge_actors.py||
|ReplaceMaterials\replace_red_materials.py||

## pip install
pipの場所
windows10の場合、pip installを直接打つと『pip fatal error in launcher』エラーが出て動作しないので、python -m 経由で実行する。targetの設定も忘れずに

* C:\Program Files\Epic Games\UE_4.21\Engine\Source\ThirdParty\Python\Win64\Scripts

```
cd C:\Program Files\Epic Games\UE_4.21\Engine\Source\ThirdParty\Python\Win64\Scripts
python -m pip install --target="C:\Program Files\Epic Games\UE_4.21\Engine\Source\ThirdParty\Python\Win64\Lib\site-packages" Pyside
```

* http://www.chrisevans3d.com/pub_blog/python-ships-unreal-engine-4-19/
* https://stackoverflow.com/questions/24627525/fatal-error-in-launcher-unable-to-create-process-using-c-program-files-x86

## Pythonの場所
UnrealEngineにbuilt-inらしい...。

```python
import os
print(os.getcwd())
```
```
LogPython: C:\Program Files\Epic Games\UE_4.22\Engine\Binaries\Win64
```
```python
import sys
print(sys.executable)
```
```
LogPython: C:\Program Files\Epic Games\UE_4.22\Engine\Binaries\Win64\UE4Editor.exe
```

# 参考
* [UE4のPython使ってみた](https://twitter.com/i/moments/1014447019698475008) 大変参考にさせて頂きました！
* [UE4 Python使用方法についての公式ドキュメントです](https://docs.unrealengine.com/en-US/Engine/Editor/ScriptingAndAutomation/Python/index.html)
* [Python API一覧](https://docs.unrealengine.com/en-US/PythonAPI/index.html)
* [EditorAssetLibrary](https://docs.unrealengine.com/en-US/PythonAPI/class/EditorAssetLibrary.html) API一覧には存在しないが、なぜか個別にclassのマニュアルが存在するのだった...。
* https://qiita.com/koorinonaka/items/acbd8fde9230cd62ec87
* https://github.com/mamoniem/UnrealEditorPythonScripts