コンソールや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ステップでとても簡単です。
- 所定の場所にファイルを作る
- Luaの自作関数を作成する(+export)
- BeamNG.drive内でロードして使用する
ということで一つずつ説明していきたいと思います。
1. 所定の場所にファイルを作る
Luaコマンドを自作する場合は、以下のフォルダ内にxxx.luaのファイルを作成します。
C:\Users\<UserName>\AppData\Local\BeamNG.drive\0.24\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の幅が広がると思います。
皆さんも是非オリジナルのコマンドを作成してみてください!!!
コメント / COMMENT