【BeamNG drive】Mod作成記#5 –Lua APIを作る–

自作Lua APIのファイルはBeamNG.drive\バージョン\lua\の下に作成する。サブフォルダを作成してもよい。 BeamNG.drive

コンソールやMod内で使うことが多いLua API(コマンド)ですが、Luaコマンド自体もプレイヤーがModとして作成可能らしいです。

※Luaコマンドは、例えば以下のようなコマンドです。
https://games.mathkuro.com/2022/01/beamng-commands/



Luaコマンドを自作することで、一歩踏み込んだMod作成が可能になるはずです。

ということで、今回は自作Lua APIを用いたModの作成方法をご紹介していきます。

そもそもLuaとは?

Luaはプログラミング言語の一つです。
スクリプト系に分類される言語で、簡単に実装出来て高速という特徴があり、ゲーム開発界隈でよく使われます。

BeamNG.driveでも使用されており、例えばコンソールで使うコマンド等がLuaで実装されています。

Luaを使ったModの作り方

Modの作り方自体は、以下の3ステップでとても簡単です。

  1. 所定の場所にファイルを作る
  2. Luaの自作関数を作成する(+export)
  3. BeamNG.drive内でロードして使用する

ということで一つずつ説明していきたいと思います。

1. 所定の場所にファイルを作る

Luaコマンドを自作する場合は、以下のフォルダ内にxxx.luaのファイルを作成します。

C:\Users\<UserName>\AppData\Local\BeamNG.drive\0.24\lua


以下のようにサブフォルダを作成しても問題ありません。

自作Lua APIのファイルはBeamNG.drive\バージョン\lua\の下に作成する。サブフォルダを作成してもよい。

2. Luaの自作関数を作成する(+export)

xxx.luaのファイルを作成したら、その中にLuaのコードを書いていきます。

ここでのポイントは、作成したコードを他の場所から参照できるようにすることです。

方法自体は簡単で、使用したいコードを関数化し、テーブル型の変数に格納してreturnするだけです。

以下にサンプルコードを示します。
~\AppData\Local\BeamNG.drive\0.24\lua\test.lua

-- helloWorldをログ出力するだけのサンプル
local function helloWorld()
  -- log(ログレベル, タグ, ログメッセージ)
  log('I', 'test01', 'helloWorld')
end

-- 公開したい関数をtableに設定し、モジュールレベルでreturnする
-- ここで設定した関数のみがコンソール等で使える
local M = {}
M.helloWorld = helloWorld
return M

上記は”helloWorld”とログに出力する関数をhelloWorldという名前で公開している例です。

3. BeamNG.drive内でロードして使用する

作成したLua関数をBeamNG.drive内で使用するためには、実行前にロードを行う必要があります。

ロードは以下のコマンドで実行します。

extensions.loadAtRoot(<extPath>, <rootName>)

extPath: 作成したファイルの相対パス。luaフォルダからの相対パスでOK。拡張子は不要。’\’ではなく’/’な点に注意。
rootName: ネームスペース的な奴。空文字(”)でもOK。

ロードしたコマンド・関数は以下の形式でBeamNG.drive内で使用できます。

<rootName>_<ファイル名(拡張子を除く)>.<関数名(M.に指定した名前)>



例えば、~\BeamNG.drive\0.24\lua\work\test.luaのhelloWorldコマンド(上述のサンプルコード)を実行したい場合は、以下のようになります。

①フリーロームで適当なMapを開く

②コンソールで以下のコマンドを実行し、モジュールをロード

extensions.loadAtRoot('lua/work/test', 'aaa')


③コンソールで自作コマンドを実行

aaa_test.helloWorld()

これで、ログに”helloWorld”と出力されたら成功です。


名前の付け方やパスが少しややこしいので最初は手間どりますが、一度分かってしまえば後はいくらでも応用が利くかと思います。

終わりに

ということで今回はLua API(コマンド)を自作する方法を紹介しました。

Luaまで来ると割と何でもできるので一気に作成できるModの幅が広がると思います。

皆さんも是非オリジナルのコマンドを作成してみてください!!!

コメント

タイトルとURLをコピーしました