Unity2021 Bolt統合で何が変わったのか
Unity2021.1.0b8 でBoltが統合されてますね。
久しぶりの更新です。
Boltをいじってなかったわけでもなく、色々ごにょごにょしていました。いずれまた成果物を出せればと思っています。
何が変わったのかUnityステーションから動画も公開されました。https://www.youtube.com/watch?v=YzaqqwP9-48
ざっとかいつまんで&勝手な補足を加えつつ以下に書いてみたいと思います。
BoltのAsset Storeからのインストールが不要
Unityに統合されたということでAsset Storeからのインストールも不要です。
やっとAsset Storeのライセンスの呪縛から解放されるので、私的にはこれが一番嬉しいですね。
Flow Machine が Script Machineへ改名
Add Component の際に従来は Flow Machine コンポーネントを追加していましたが、これが Script Machine コンポーネントに改名されました。
Macro/Embed の箇所は Graph/Embedに変更されています。
GUIの配置は特に変化がなく名前の変更だけなようですね。
で、どうも挙動的には初回Script Machineコンポーネント追加時に何やらダウンロード&インストールしてるように見受けられます。どうもこの時にBoltのアセットをインポートしているような感じです(Unityに統合とはいえ使用時に自動でBoltのアセットが追加されてる様子)。
2つ目以降のScript Machineコンポーネント追加は即時ですので、初回だけ少し時間がかかります。
Unit Options Wizardはどこ?
上部ツールバーから、
Edit > Project Settings... > 左列下方の Visual Scripting をクリック。
従来 Tools > Bolt にあったメニューはこの Visual Scripting パネル内に集約されたようです。
その中の ▽Node Library がAssembly Options に相当している感じです。
クリックすると従来の Unit Options Wizard での登録とほぼ同じGUIが出てきます。
すぐ上にType Optionsもあります。
Branchノードがなくなってifノードになった
初めてBoltを触った時に、ifはどこだ・・・あ、Branchか、と思っていたので if になったのは良いかもしれません。
ですが、既にBranchで慣れてしまったので、逆に違和感が(w;
※この手のノード名変更がちょくちょくあるらしいです。
C#からBoltのカスタムイベントを使う際の using 名が変更
従来は以下のようなものでしたが、
using Ludiq;
using Bolt;
以下のようになりました。
using Unity.VisualScripting
これで晴れて買収元社名のusing名がなくなって Unityになった感。
Boltの細々設定するところPreference
Edit > Preferences からの左列下方にある Visual Scripting をクリックすると、Bolt関連の細かい設定があります。
従来のWizardで設定していたHuman Naming等もここで指定するようになったようですね。
その他ちょっと気になる設定項目等々色々増えています。
Unity2021でも従来のBolt Assetは使えるのか?
使えました。
従来のBolt Assetで作成した自作ゲームを(Bolt Assetごと)まるっとUnity2021にコンバートしてみましたが動作しました。
ただし従来のBolt Asset「のみ」なら使えます。
(詳細は次項へ)。
Unity2021統合版Boltと従来のBolt Assetは同時に使えない
基本的に同時利用はできないようです。
例えば、まずUnity2021で統合版Boltで何かScriptグラフを作成します。すると関連Assetが自動的にダウンロード&インストールされます。
次にUnity Asset Storeから従来のBolt Assetをインポートします。今回は Bolt_1_4_13_NET4 をインストールしました。
するとエラーがでてしまいUnity Editorを再生状態にできなくなります。
※この後、Bolt Assetを削除すればエラーは消えてUnity Editorを再生できるようになります。
/Assets/Ludiq/Assemblies/YamlDotNet.dll で同名のものがあるというエラーがでています。多分ですが統合後のBoltで既に同名のもの(同じエントリを持つDLL?)が存在している為、Bolt Assetのものが重複してるというエラーかと思われます。
Bolt自体の中身はほぼ同じかと思われるので、ちょっと考えればなるほどという感じですが。
新旧Boltの同時利用は「一応」できないようなので注意ですね。
新旧Boltを同時に使う(おい?
「おいおい、今さっき同時に利用できないって言ってなかったっけ?」。
はい、普通はできないんじゃないかなと思います。
なので普通じゃない感じなら利用できたという話をちょっとだけ。
どうしたかというと、
・多分新旧ともに同じもの(DLL)は使ってるけど、エントリ名が重複してるだけだろう(多分DLLのエントリ定義体のPreCompileでエラーぽい?位のテキトーな思考)。
・重複エラーが出てる Bolt Assetの方のDLLやらを順に削除(実は複数個ある
・エラーが消えた。
・Add Componentで Flow Machine と Script Machine が同時に候補に出せるようになった。
・新旧グラフをそれぞれ作成してみた>いずれも同時に動作する。
ただし、新旧の各コンポーネント Flow Machine と Script Machine に紐付けられるMacroファイルはそれぞれ用のものだけです。
つまり従来Boltで使用していた Flow Machine に紐付けていた Flow グラフを、Script Machine にアタッチはできません。逆も然り。
しかし一応共存することは強引にできました。
ただ他にも気になるWarningはでているので本番利用は推奨できない気はします(本気だせばあるいは・・・でもやる意味が微妙。
新旧グラフ間でのカット&ペーストもコピーバッファが別扱いなようで相互に貼り付けはできません。これができればコンバート作業で少しは楽かもと思ったのですが。
あくまで参考程度の話ということで。
Bolt AssetのFlowグラフを総合後Boltで使う
結論からいうと手動対応すれば一応は使えますが面倒です。
自動的にコンバートはしてくれないようです。
統合前に作成したFlowグラフをAssets上で選択してInspectorで見ると Missing になっていて使えません。
動画によると、総合後Boltで新規作成済の .assetファイル内の m_Script の行を、統合前Flowグラフのアセットファイル .asset にテキストエディタでコピペすると正しいFlowグラフとして認識します。
実際に簡単な Debuig.Log程度のFlowグラフは上記の手順でいけましたが、1つ1つ手作業で行うのはちょっと現実的ではありません。
で、実際にBoltで作成した自作ゲームを新しいScript Machineに置き換えてみようと試みましたが数分で諦めました。
どうもグラフの中で参照している先のFlowグラフのカスタムイベントやenumがうまく認識できていないような感じです(参照先エラーがあると中身が空になる様子?)。この辺は詳細追加検証要ですが、先のように グラフの .asset ファイルの m_Script のある行を単純に書き換えていけば済むだけという話だけではなさそうです。
では参照先を先に認識させればいいのでは?という話になるわけですが、
相互に参照しているFlowグラフはここでデッドロック状態になるのではないか?ということが頭をよぎってとりあえず作業中断。未検証ですが相互にカスタムイベントを呼んでいる異なるFlowグラフスクリプトあたりが気になります。その他ちょっとトリッキーな実装のスーパーユニットがどうなるか等。
いずれも統合後のBoltで新規作成すれば多分動作すると思うので、そこまでコストをかけて移植作業をする必要性があるかどうかということになりそうです。
とりあえず、ある程度の規模の過去資産のものを新しいBoltに持ってくる際は相応の移植コストを見積もっておいた方が良いかもしれません。
つまり過去資産は従来通りのBolt Assetで運用して、新規プロジェクトへ切り替えた際に各グラフ流用物の移植コストも込みで新Boltに乗りかえる、というくらいが現状はベターに見えます。
Unity2021でもBolt Assetは動作しているので、無理に統合版のBoltにする必要性は無いと言えば無いのですが。GitHub等の一般公開する際は統合版にしたいところですね(Bolt Assetのライセンス問題回避の為。
従来Bolt用に作成されているBoltノードのAssetはどうなる?
状況的に全滅ではないかと思われます。
※私は自作のものしかないのでこの辺はさほど気にしてない感。
よもやま
最近また諸々の事情にてBluePrintいじってます。
Boltで開発した後に、BluePrint使うと色々と思うところはありますね。
UE4は(プログラマ的には)あまり使いやすいとは思わないのですが、デザイナーに使わせようと思った時だけは高機能だなぁと感じます。この辺の差がやたらとUE4がデザイナー受けしてる所以な気はします。
まだまだマイナー感は否めないBoltですが、Unityのロードマップは着々と進んでいますし、さらに今後に期待です。
(UE4だって数年前までは圧倒的にマイナーなものだったので、何がどうなるかはこの先全くわかりません)