1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Visual Scripting(BOLT)でLuaスクリプトを動かすLuaFormulaを作ってみた

Last updated at Posted at 2022-05-27

概要

UnityのVisual Scripting(旧BOLT)にはFomulaノードという数式を記述して計算結果を出力するノードがあるのですが、できるのはあくまで簡単な数式だけでできることが限られるなと思ったので。
せっかくなら同じような感じでLuaコードを実行できたらノード同士をつなげて実現するのは面倒だけどC#でコーディングするほどの事でもないような隙間を程よく埋められるんじゃないかと思い作ってみました。

LuaFormula2.png

インストール

Lua実行環境にxLuaを利用しているため、xluaをインストールする必要があります。
xLuaのインストールはここからZipファイルをダウンロードし、ZiPファイル内にあるAssetフォルダの中身をプロジェクト内のAssetフォルダにコピーするだけです。

LuaFormulaノードはここからソースコードをC#ファイルとして保存し、プロジェクトのAssetフォルダ内の何処かにコピーするだけです。

使い方

インストールが上手くいっていればノード検索でLuaとでも検索すればLua Formulaが候補に現れるはずです。
LuaFormula1.png

LuaFomulaを選ぶと以下のようなノードが出てくるはずです。
LuaFormula2.png

Inputsの値を変えることで入力データポートの数を0個から最大9個まで設定できます。
LuaFormula10.png

入力データポートに接続したノードの内容はLua環境内ではグローバル変数A~I(大文字)に格納されています。
またグローバル変数R(これも大文字)に値を代入することで出力データポートResultに接続したノードにその値を渡すことができます。
テーブルを渡すとLuaTable型のオブジェクトが渡されるため、そのままではVisual Scriptingでは扱えなくなるので注意してください。

例えば入力データポートAとBに適当なIntegerノードを接続し、2つを足した結果をResultに出力したい場合は、
R=A+Bという風に入力します、実行すると画像のような結果になります。
LuaFormula3.png

Lua実行中にエラーや例外が発生した場合は出力データポートのSuccessにはFalse、ErrorMessageにはエラーや例外の内容が渡されます。
その場合、Luaコードの実行は止まりますがVisual Scriptingのフローはそのまま継続します。
Unity Editor上で実行している場合はコンソールにエラーログが表示されます。
誤ったLuaコードを入力して実行した場合はこのような感じになります。
LuaFormula4.png

入力データポートにゲームオブジェクトやコンポーネントを渡してLuaコード上で操作することもできます。
Text(Legacy)コンポーネントの.textメンバを代入してテキストボックスの内容を取得するとこんな感じになります。
LuaFormula5.png

LuaFormulaは意図しない参照を防ぐためデフォルトでは終了時にA~Iの内容をnull(nil)にクリアしますが、
複数のLuaFomulaノードに一つ一つ接続するのは面倒なので使いまわしたいといった場合は
インスペクタウインドウにあるCache ArgumentsチェックボックスにチェックをすることでA~Iの内容を保持することができます。
LuaFormula6.png

これで以下のように次のLuaFormulaノードにも変数を引き継ぐことができます。
LuaFormula7.png

変数Aは保持したいが、次のLuaFomulaノードには新たに別のノードのデータを渡したいという時は以下のようにAに何も接続しないでおくと上書きされることなく変数Aを保持できます。
(Cache Argumentsチェックボックスにチェックは必要です)LuaFormula8.png

Unity環境にLuaテーブルを保存できるように簡易のシリアライズ、デシリアライズ関数が使えるようにしてあります。
以下のような感じでテーブルの内容を文字列に変換したり、文字列からLuaテーブルに変換できたりします。
LuaFormula9.png
あくまでこの機能は簡易版なので本格利用にはJSONを推奨します。
JSONはUnity側は(データ構造を定義するC#クラスを作る必要がありますが)標準で備えていますし、Lua側はjson.luaソースコードをjson.lua.txtとして保存しAttach/Resourcesにコピーするだけで使えるようになるので簡単です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?