Blog

[Unreal Engine 4] Lua スクリプトで設計がより柔軟に(2)

Category : Unreal Engine 4

執筆者 : K.T

はじめに


UE4 には、ブループリントというビジュアルスクリプティングシステムがあります。

非常に強力な機能ですが、あらゆる局面でブループリントが最適解かと言えば、そうでもありません。

テキストベースのスクリプトという選択肢を加えることで、設計の柔軟性向上が期待できます。

この記事の内容


「パズル」テンプレートに、Lua というテキストベースのスクリプトを組み込みます。

ロジックを Lua で実装し、パッケージ化した後でもロジックを変更できるようにします。

長いので、4回に分けてお送りしています。

第1回はプロジェクトを作成して LuaMachine プラグインを組み込みました。

第2回(今回)はデフォルトの Lua スクリプトファイルと、C++ ソースファイルを実装します。

第3回は UE4 エディタ上で必要な変更を行い、ロジックを Lua で実装したバージョンを完成させます。

第4回はパッケージ化を行い、実行ファイルを動作させたままで、2種類のゲームを追加します。

使用するもの


 ・Unreal Engine 4.26.2

 ・Visual Studio 2017

 ・LuaMachine 20201211

Lua スクリプトファイルを追加


LuaSample/Content 以下に NonAssets/Lua フォルダを作成してください。

その中に、以下の2つの Lua スクリプトファイルを追加します。

Start.lua は、ゲームの初期化時に実行される Lua スクリプトファイルです。

内部ではさらに別の Lua スクリプトファイルを実行して、その結果を返します。

Main_0.lua は、Start.lua から実行される Lua スクリプトファイルです。

ゲームの初期化時・実行時・クリック時・オーバーラップ時に呼び出される関数を記述しています。

内容としては「パズル」テンプレートの動作を、そのまま再現するようにしてあります。

C++ ソースファイルを追加


続いて LuaSample/Source/LuaSample 以下に、以下の4つの C++ ソースファイルを追加します。

UMyLuaState は、独自の Lua ステートクラスです。

LuaMachine プラグインにおいて、グローバルな(全体に公開する)関数・変数を格納しています。

UMyLuaComponent は、独自の Lua コンポーネントクラスです。

LuaMachine プラグインにおいて、ローカルな(外部に公開しない)関数・変数を格納しています。

本来 Lua コンポーネントクラスは、アクタのインスタンスごとに持たせるような使い方ができるのですが、今回はグリッドクラスで1つだけ使用しています。

LuaSample プロジェクトフォルダに戻り、LuaSample.uproject を右クリックして、Generate Visual Studio project files を選択してください。

LuaSample.sln が最新の状態に更新されます。

C++ ソースコードを修正


LuaSample.sln をダブルクリックして、Visual Studio を起動してください。

以下の C++ ソースコードで、背景が黄色の部分を追加します。

LuaSampleBlock.cpp 内の ALuaSampleBlock::HandleClicked()ALuaSampleBlock::Highlight() では、既存の処理を削除している点にご注意ください。

修正が済んだらビルド&保存して、Visual Studio を閉じてください。

まとめ


今回はデフォルトの Lua スクリプトファイルと、C++ ソースファイルを実装しました。

Lua スクリプトファイルをロード&実行した結果が ALuaSampleGameMode::ScriptTable に保存される点と、Lua 関数実行時にこのテーブルが渡される点を押さえれば、構造を把握しやすいと思います。

次回は UE4 エディタ上で必要な変更を行い、ロジックを Lua で実装したバージョンを完成させます。

参考リンク


Lua 公式

LuaMachine – GitHub

LuaMachine – マーケットプレイス

Unreal Engine 4関連記事(ORENDA技術ブログ)

著作権表示


Lua

Copyright (c) 1994-2021 Lua.org, PUC-Rio.

Released under the MIT license

LuaMachine

Copyright (c) 2018 Roberto De Ioris

Released under the MIT license