Posted at

UE4 Pythonプラグイン(UnrealEnginePython)を試してみる


概要

UnrealEngineで使用可能なPythonプラグイン UnrealEnginePython についての記述です。

インストールとテストコードの実行を行っています。

バイナリ配布からのインストールはうまくいきませんでした。


環境

Windows10

Visual Studio 2017

UnrealEngine 4.22

UnrealEnginePython


参考

以下を参考にさせて頂きました。ありがとうございます。

UnrealEnginePython プラグインを使ってみた (導入編)

UE4でPythonを使ってみる

プラグインをパッケージ化しよう!


準備


プラグインインストール(バイナリ)

https://github.com/20tab/UnrealEnginePython から

UnrealEnginePython_20190508_4_22_python36_embedded_win64.zip

をダウンロードして[Plugin]フォルダに展開します。

uprojectを右クリック -> [Generate Visual Studio project files]を選択してソリューションを生成。

VisualStudioをビルドした結果、以下のようなエラーになりました。


エラー表示(VisualStudio)

Could not find definition for module 'UnrealEnginePython' (reference via default plugins -> UnrealEnginePython.uplugin)


UEエディタでのエラー表示は以下の様に。


エラー表示(Editor)

ERROR: Could not find definition for module 'UnrealEnginePython' (referenced via default plugins -> UnrealEnginePython.uplugin)


エラーがでて動きません。モジュールが見つからないようです。

.uprojectに追加してみたり、Build.csに追加してみたりを試したのですがダメでした。


プラグインインストール(ソース)

https://github.com/20tab/UnrealEnginePython

そのままダウンロード、[UnrealEnginePython]を[Plugin]フォルダに配置します。

"\Plugins\UnrealEnginePython\Source\UnrealEnginePython\UnrealEnginePython.Build.cs"

の11行目の pythonHome のパスをローカルのPythonがインストールされているパスに修正します。


UnrealEnginePython.Build.cs

// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.IO;
using System.Collections.Generic;

public class UnrealEnginePython : ModuleRules
{

// leave this string as empty for triggering auto-discovery of python installations...
private string pythonHome = "C:/Python/Python37";  // ←ローカル環境のパスにする
...


エディターだけでの使用なので、

"\Plugins\UnrealEnginePython\UnrealEnginePython.uplugin"

TypeRuntime から Editor に書き換えます。


UnrealEnginePython.uplugin

  "Modules": [

{
"Name": "UnrealEnginePython",
"Type": "Editor",
"LoadingPhase": "Default"
},

uprojectを右クリック -> [Generate Visual Studio project files]を選択してソリューションを生成し、ビルド。

plugin_window.png

プラグイン画面に追加されました。


プラグインパッケージ化

ソースインストール後にプラグインパッケージ化を行い、バイナリインストール時と同じエラーで起動できませんでした。

ソースだとC++ソースが増えてビルドが遅くなってしまい都合が悪いですが、現在のところ解決方法がわかりません。:disappointed_relieved:


機能メモ


Python Console

[ウィンドウ] -> [デベロッパーツール] -> [Python Console] から起動できます。

python_console.png


PythonConsole

>>>import platform

>>>print(platform.python_version())
3.7.3
>>>print('1500 * 1.08 = ', 1500 * 1.08)
1500 * 1.08 =

1620.0


対話モードのようにPythonが実行できます。


Python Editor

[ウィンドウ] -> [Python Editor] から起動できます。

PythonEditor.png

Pythonコードを書いて[Execute]で実行できます。

記述したPythonファイルは Content/Scripts フォルダ以下に保存されます。

Slate使ったファイルピッカーのテストです。


TestScript.py

import unreal_engine as ue

from unreal_engine import SFilePathPicker, SWindow, FLinearColor
from unreal_engine.structs import ButtonStyle, SlateBrush, SlateColor

# ボタンスタイル用意
style = ButtonStyle(Normal=SlateBrush(TintColor=SlateColor(SpecifiedColor=FLinearColor(1.0, 0, 0))))

# ウィンドウ用意
window = SWindow(client_size=(600,400), title='TestWin', modal=True)

# パス表示&ウィンドウ始末
def path_picked(path):
print(path) # 'Engine\Binaries\Win64'からの相対パス表示
window.request_destroy()

# ファイルピッカー設定
picker = SFilePathPicker(browse_title='SelectFile', browse_button_style=style, on_path_picked=path_picked)
window.set_content(picker)

window.add_modal()


実行後のウィンドウ、右の赤いボタンが押せます。

TestScript_Win.png

ピッカーボタンを押下してファイル選択後のアウトプットログ

TestScript_OutputLog.png

Python でのログが出力されています。


PythonAutomation

Python実行用のモジュールを管理するもの?


まとめ

一応使えますがエディタなどは使いにくいので別で用意するほうが良さそうです。(コード補完がないとツラいです、特にメソッド名)

Actorクラス等も書けるようですが、Pythonに習熟していたとしても情報が少ないため、使い道としてはPythonライブラリを扱うものやエディター系の処理に限定したほうが良いかもしれません。

追加パッケージのインストールについては pip がついているのでできそうですが、調査できていません。

あとバイナリでのプラグイン追加がうまくいかない問題が解決できませんでした。:worried: