UnrealEngine4でPython リターンズ その2

前回、UE4のPythonの基本設定まで行いました。今回は具体的なツールにしてみましょう。
そもそもなぜ、Pythonが必要か?という目的ですが、CADから変換する場合、そのパーツ数が多く、その全てにマテリアルを設定して、マテリアルエディタでノード接続し、BluePrintでその全てにプログラムを組むとなると気が遠くなります。
そこでPythonの出番です。さらにプログラムを操作するとなると、せっかく文系でも使えるUE4が使いにくくなるので、UE4Editorもカスタマイズして、誰でも使えるようにできる、という話です。

さて、前回はマテリアルを自動生成しましたが、それは別の機会に細かく説明します。今回はBluePrintの代わりにPythonが使える、という例です。

まず、コンテンツブラウザから「ブループリントクラス」を実行します。通常「Actor」とか作りますが、下の「すべてのクラス」から「py」で検索して、「PyActor」を探し「選択」します。それ以外に「PyHMD」「PyCharactor」「PyPawn」などもありますね。いずれ解説します。

普通のActorのBPが起動しますが、「Python」という項目があります。

前回やりましたが、「ウインドウ」→「PythonEdtor」を起動して、以下のプログラムを入力します。

import unreal_engine as ue

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

class Hero:

    # this is called on game start
    def begin_play(self):
        ue.log('Begin Play on Hero class')
        
    # 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)

一度「Save」した後、左の項目をダブルクリックして「funnygameclasses」に名前を変更します。

BPに戻って、Pythonの項目に「 python module」を「funnygameclasses」に「PythonClass」を「Hero」にします。

Cubeのスタティックメッシュのコンポーネントを追加します(なんでもOKですが)。ここでコンパイルします。

作ったActorBPをレベルに出して、Playします。
Cubeが上に限りなく飛んでいくでしょう。

上のプログラムの12行目の
def tick(self,delta_time)
がBluePrintのTickイベントでマイフレーム実行されます。16行目の

location.z += 100 * delta_time
で、Z座標にマイフレームごとの100追加していき、次の行で設定します。
これで上に移動するのです。

「ウインドウ」→「デベロッパーツール」→「PythonConsole」を見ると、プログラムの3行目と9行目のメッセージが確認できます。
ue.log(文字列)
でコンソールに通知しているので、PythonがBluePrintの中で動いているのが判ります。
def begin_play(self)
これはBluePrintの「BeginPlay」のことです。このようにBluePrintの操作をPythonで書くことができます。

年内のBrosブログはこれでお休みです。次回は1月10日(木)から再開します。

コメントを残す