9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【UE5】UE5.3でPyTorchを使う方法

Last updated at Posted at 2023-09-27

はじめに

UnrealEngine5上でPytorchを使う方法を紹介します.
様々な方法ありますが,今回はUE5上でPythonコードが書ける方法を紹介します.
PyTorchに限らずPythonのサードパーティーパッケージ何でも可能だと思います(試してはない).
もちろんnumpyのような標準ライブラリもUE5上で利用可能です.

1.UnrealEnginePythonをダウンロードする

まずUE5上でPythonを実行するのに以下のGithubからUnrealEnginePythonをダウンロードします.
友人に頼んで5.3に対応してもらいました.

githubのリポジトリから緑のCodeボタンを押して
github.png
Download ZIPでダウンロードできます.
github2.png
ダウンロード出来たら解凍しておいてください.

2.Python環境を構築するプロジェクトを作成する

新しいプロジェクトを作成します.この際C++を選んでください.
※余談ですがPathに日本語含まれるとエラー吐きますので全てアルファベットにするのが推奨です.
プロジェクトブラウザ.png
作成しましたらプロジェクトのフォルダに
フォルダ1.png
Pluginsフォルダを作成し
フォルダ2.png
先ほど解凍したUnrealEnginePythonをPluginsフォルダに移動します.
フォルダ3.png
プロジェクトを起動するとリビルドを促してくるのでYesを押します.
リビルド.png

3.PythonをUE5で実行する

UE.png
リビルドが終わったらブループリントクラスを作成し,すべてのクラスから「PyActor」を選んでください.
UE2.png
今回は「BP_PyActor」と命名しました.
UE3.png
では,Pythonのコードを書くためにウィンドウからPythonEditorを開きます.
UE5.png
PythonEditorを開いたらNewから新しいPythonファイルを作成します.
UE6.png
今回は「PythonFunction」と命名しました.
右下に「再インポートを行いますか?」と表示されるので,インポートを押してください.
UE10.png
「PythonFunction」に今回のサンプルコードを書きます.
単にTickでZ軸移動しているだけのコードです.
UE7.png

PythonFunction
import unreal_engine as ue
from unreal_engine.classes import KismetSystemLibrary

ue.log('Hello i am a Python module')

class PyActor:

    # this is called on game start
    def begin_play(self):
        KismetSystemLibrary.PrintString(InString = "PyActor BeginPlay", Duration = 5.0)
        
    # this is called at every 'tick'    
    def tick(self, delta_time):
        # get current location
        location = self.uobject.get_actor_location()
        # increase Z honouring delta_time
        location.z += 100 * delta_time
        # set new location
        self.uobject.set_actor_location(location)

では,「PythonFunction」で書いたコードを実行します.
先ほど作成した「BP_PyActor」を開きます.
UE8.png
今回わかりやすいように,Sphereを追加しておきます.
UE9.png
それではクラスのデフォルトから詳細タブのPythonタブが追加されていますので,
UE11.png
PythonModuleにPythonファイルの名前のPythonFunction,
PythonClassにPythonクラスの名前のPyActorを入力します.
UE12.png
では今作成した「BP_PyActor」をレベル上に置いてみましょう.
image.png
それでは実行しますと,SphereがZ軸に移動しました.
またPrintStringも実行したので,左上に文字が出力していることもわかります.

PythonFunction
#PrintSting
KismetSystemLibrary.PrintString(InString = "PyActor BeginPlay", Duration = 5.0)

UE14.png
PrintStringではなくue.logの出力は左下の「出力ログ」を押すと
UE15.png
ログを確認することができます.
UE16.png

4.PyTorchをUE5で実行する

では最後にPyTorchを実行できるようにPyTorchをインポートします.
今回はこちらを参考にさせていただきました.同じようにするとnumpyをインポートできます.

まずUEのpython.exeのpathを確認します.
特に設定していなければ
C:\Program Files\Epic Games\UE_5.3\Engine\Binaries\ThirdParty\Python3\Win64
にあると思われます.
UE17.png
ではcmdを立ち上げます.
Win+Rで検索画面がでるので「cmd」を入力しますと
cmd.png
cmdが立ち上がります.
cmd1.png
これから,PyTorchをインポートをします.
PyTorchを使ったことがある人は知っていると思いますが,通常は以下の公式からインポートするコマンドをコピーします.

pytorch.png
cmd2.png
しかし,pip3はないとエラーを吐くので
cmd3.png
今回のコマンドはpip3をpipに変えた以下のコマンドを使用します.
""内のpathは先ほど確認したpathです.

"C:\Program Files\Epic Games\UE_5.3\Engine\Binaries\ThirdParty\Python3\Win64\python.exe" -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

コマンドを入力すると,ダウンロードが始まります.
cmd4.png
cmd5.png
インポート終わったら「PythonFunction」を書き換えます.
ここでPyTorchが使えているかどうかを見るために

torch.device('cuda' if torch.cuda.is_available() else 'cpu')

を追加しPrintStringで出力しています.

PythonFunction
import torch
import unreal_engine as ue
from unreal_engine.classes import KismetSystemLibrary

DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
ue.log('Hello i am a Python module')

class PyActor:

    # this is called on game start
    def begin_play(self):
        KismetSystemLibrary.PrintString(InString = str(DEVICE), Duration = 5.0)
        
    # this is called at every 'tick'    
    def tick(self, delta_time):
        # get current location
        location = self.uobject.get_actor_location()
        # increase Z honouring delta_time
        location.z += 100 * delta_time
        # set new location
        self.uobject.set_actor_location(location)

それでは実行すると,左上に「cuda」と出力されればPyTorchが実行していることがわかります.
UE18.png

さらに具体的なコードを書くには

Pythonの部分はPythonですが,UEに関する関数はUnrealC++と少し異なるので他に関数など使いたい場合は

UE5.3改良前のGithubに具体的な手法が載っているのでこちらを参照してください.
Pythonで書いた関数を呼び出す方法など知ることが出来ると思います.

9
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?