前回、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日(木)から再開します。