Blog

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

執筆者 : K.T

はじめに


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

この強力な機能によって、従来はプログラマに頼らざるを得なかった実装や変更を、プランナやデザイナが行えるようになりました。

また、変更をランタイムで反映させることにより、試行錯誤にかかる時間が短縮されました。

しかし、あらゆる局面でブループリントが最適解かと言えば、そうでもありません。

実際には、昔ながらのテキストベースのスクリプトが便利なこともあるのです。

テキストには以下のような利点があります。

・バージョン管理システムと相性が良く、履歴や差分の把握が容易 
・コンフリクトが発生しても、マージ可能なことが多い 
・検索や置換が容易で、外部ツールによる編集も可能
・画面内に表示できる量が多く、一覧性が高い

頻繁に変更される部分、複数人で編集しあう部分、ロジックが複雑な部分などは、テキスト向きだと思います。

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

この記事の内容


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

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

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

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

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

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

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

使用するもの


 ・Unreal Engine 4.26.2

 ・Visual Studio 2017

 ・LuaMachine 20201211

プロジェクトの作成


プロジェクトブラウザを起動し、新規プロジェクトを作成します。

「ゲーム」カテゴリを選択してください。

「パズル」テンプレートを選択します。

「C++」プロジェクトを選択しておいてください。

名前は LuaSample とします。

UE4 エディタと Visual Studio が開くので、いったん両方とも閉じてください。

LuaMachine プラグインの組み込み


Lua スクリプトを使用するために、LuaMachine というプラグインを組み込みます。

マーケットプレイスで販売されていますが、GitHub からダウンロードすることもできます。

https://github.com/rdeioris/LuaMachine/

上記 URL を開き、Code 内の Download ZIP を選択してください。

LuaMachine-master.zip というファイルがダウンロードされます。

次に、LuaSample プロジェクトフォルダ以下に Plugins フォルダを作成します。

Plugins 以下に、先ほどダウンロードした LuaMachine-master.zip を展開してください。

フォルダ名が LuaMachine-master になるので、LuaMachine にリネームします。

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

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

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

以下のソースコードで、背景が黄色の部分を修正します。

LuaSample.Build.cs

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;

public class LuaSample : ModuleRules
{
   
public LuaSample(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        PublicDependencyModuleNames.AddRange(
new string[] { “Core”, “CoreUObject”, “Engine”, “InputCore”, “HeadMountedDisplay”, “LuaMachine” });
    }
}


LuaSample.Target.cs

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class LuaSampleTarget : TargetRules
{
   
public LuaSampleTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Game;
        DefaultBuildSettings = BuildSettingsVersion.V2;
        ExtraModuleNames.
AddRange(new string[] { “LuaSample”, “LuaMachine” });
    }
}


LuaSampleEditor.Target.cs

// Copyright Epic Games, Inc. All Rights Reserved.

using UnrealBuildTool;
using System.Collections.Generic;

public class LuaSampleEditorTarget : TargetRules
{
   
public LuaSampleEditorTarget(TargetInfo Target) : base(Target)
    {
        Type = TargetType.Editor;
        DefaultBuildSettings = BuildSettingsVersion.V2;
        ExtraModuleNames.
AddRange(new string[] { “LuaSample”, “LuaMachine” });
    }
}


LuaSampleGameMode.h

// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include “CoreMinimal.h”
#include “GameFramework/GameMode.h
#include “LuaSampleGameMode.generated.h”

/** GameMode class to specify pawn and playercontroller */
UCLASS(minimalapi)
class ALuaSampleGameMode : public AGameMode
{
    GENERATED_BODY()

public:
    ALuaSampleGameMode();
};

これらの修正によって、メインモジュールから LuaMachine プラグインへアクセスできるようになります。

また、AGameMode クラスの関数(RestartGame)を利用できるようになります。

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

動作確認


LuaSample.uproject をダブルクリックして、UE4 エディタを起動してください。

メニューから 編集>プラグイン>プロジェクト を選択すると、LuaMachine プラグインが有効になっていることを確認できます。

「パズル」テンプレートには白色・青色・黄色のマテリアルが用意されていますが、これに灰色を追加します。

コンテンツブラウザで コンテンツ>Puzzle>Meshes を開き、Base Material からマテリアルインスタンスを作成してください。

作成したマテリアルインスタンスをダブルクリックしてエディタを開き、パラメータを以下のように変更します。

変更が済んだら保存して、エディタを閉じてください。

マテリアルインスタンスの名前を GrayMaterial に変更し、すべて保存します。

ここで動作確認しておきましょう。プレイを開始してください。

青色のブロックが9個と文字列が2つ表示されます。

青色のブロックをクリックすると黄色に変わり、スコアが+1されます。

動作確認できたらプレイを終了して、UE4 エディタを閉じてください。

【コラム】 なぜ Lua スクリプトか


メニューから 編集>プラグイン>Built-In>Scripting を選択すると、Python Editor Script Plugin というプラグインが見つかります。

実は UE4 には、公式で Python というテキストベースのスクリプトが用意されているのです。

ではそちらを使えば良いではないか……と思われるかもしれませんが、このプラグインには以下のような注意書きがあります。

ブループリントとは異なり、Python 環境は Unreal Editor 内でのみ使用可能です
Play In Editor、スタンドアローンゲーム、クック済みの実行ファイルなど、いかなるモードであってもプロジェクトが Unreal Engine で実行されている場合は使用できません。
つまり、Python はエディタのスクリプティングや自動化、アセット制作パイプラインのビルドでは自由に使用することができますが、現時点ではゲームプレイのスクリプト言語として使用することができません

公式の Python スクリプトは、あくまでも UE4 エディタの拡張機能ということです。

この記事では「パッケージ化した後でもロジックを変更できる」ことを目指しているので、目的に適いませんでした。

他の UE4 向けスクリプトとして、非公式 Python、Javascript、Lua が候補に挙がりましたが、バージョン更新状況や C++ との親和性などを考慮した結果、Lua を採用しました。

まとめ


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

ソースコードの修正には少し注意が必要ですが、他は特に難しくなかったと思います。

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

参考リンク


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

Lua 公式

LuaMachine – GitHub

LuaMachine – マーケットプレイス

UE4 Game ModeとGame Mode Baseの違いについて

Python を使用したエディタのスクリプティング

著作権表示


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