見出し画像

UnityのBoltでC#スクリプトを呼び出す

ビジュアルスクリプティングが難しい

つい先月ぐらいにこんな話が出てて、職場でもビジュアルスクリプティングがほんのりと流行りだしてきたので、そろそろ逃げるわけにも行かなくなってきた。世界中の偉い人が考えた車輪は、全力で使い倒すべきだろう。という訳で、右も左も分からない状態だが、早速手を出してみる事にした。

しかし、テキストエディタとデバッガだけで戦ってきたおっさんにとっては、参入のハードルが異様に高いように感じる。ネットで調べても、やりたい事に対して、その手段がなかなか見つからないのである。かといって「俺は楽してゲームを作りたいだけなんじゃムキーッ!もうええわ!コーディングで解決じゃあ!」となってしまったら本末転倒。

いきなり全部をBoltで組む、というのも今の俺には難しいので、当面の間はコーディングした方が早いと感じた箇所はC#、それ以外の所はBoltで組む、という使い分けをする事にした。

しかし、問題になるのは、「Boltから自作したC#スクリプトを呼び出す」という手順である。俺のやろうとしている事がニッチすぎるのか、単純にググる力が足りないせいか、なかなか情報を見つけ出す事ができなかった。

まあ試行錯誤の結果それっぽく動いたのだが、手順が正しいかどうかはさておき、備忘録としてここに書き遺しておこうと思う。

まずはC#スクリプトを組む

画像1

やりたい事。屋上から落ちてくる荒巻スカルチノフをオフトゥン的な何か(まだ画像作れてない)で受け止めるのだが、スカルチノフが地面に落ちてないか、つまりは生存状況を監視したい。なお、スカルチノフは複数体画面に出る事があるものとする。

まあ、早い話がゲームウォッチで出てる「ファイア」のモロパクリやね。

    enum AnimState{
       first,  // ビルから落ちてくるところ
       second, // 一回バウンド
       third,  // 二回バウンド
       fourth, // 三回バウンド
       dead,   // しんじゃった
   }

   private AnimState state;

   public bool IsAlive(){
       return (this.state != AnimState.dead);
   }

コードとしてはこんな感じ。地面に衝突したらstateがdeadになる。そして、外部からはIsAlive()を参照すれば生きてるか死んでるかは分かる。クラス名は「Skarchinov」として保存しているので、Bolt側からGameObjectに対して、いい感じにGetComponent<Skarchinov>() できれば参照できるはず。

C#スクリプトをBoltで参照できるようにする

Boltでそのまま「テキトーにユニット追加でいけるっしょ。よゆーよゆー」と思ってSkarchinovを探してみたが、全然出てこないでやんの。涙目で必死にググりまくったら、海外のQ&Aサイト経由で、このページにたどり着いた。

どうやら、「Custom Type」とかいう何かを使って、自分の作ったスクリプトを予めBoltに認識させておく必要があるみたいだ。具体的な手順は、下記のとおり。

画像3

「Tools」「Bolt」「Setup Wizard」を選択。

画像2

たぶんBoltのインストール時にも出てきたと思うのだが、こんなアレが出てくるので、「Types」の項目に辿り着くまでテキトーに選ぶ。

画像4

「Types」の所で自作スクリプトを追加して「Generate」をポチっとな。これで準備は完了だ。

ノードを組み合わせる

画像5

まず結果からご覧頂きたい。やろうとしている事は下記の通りだ。

・予めスカルチノフには「skarchinov」というタグを振っておく。
・Update() のタイミングで、「skarchinov」を持つGameObjectを検索するためにFindGameObjectsWithTagを置く。
・たぶん結果がリストで帰ってくるので、ForEachLoopでぶん回す。
・GetComponent<Skarchinov>()的な事をやる。(BodyとかItemとかテキトーに繋げたが合ってるのかは分からん)
・さっきの準備で「Skarchinov」スクリプトがグラフに追加できるようになってるので、そいつの「IsAlive()」をぶちこむ。
・Branchで結果を判定。
・FalseだったらDebug.Log()でメッセージを出力。

これでなんとなくうまく動いてそうな気がする。まあ、テキトーだからそのうちバグるかもしんないけど。

Boltを触ってみた感想

やっぱり、まだ直感的に動かせないので苦手意識は大きい。しかし、学習コストはどんな環境だろうと掛かるものだし、いざ使いこなせるようになった時の利便性はめちゃくちゃ大きいだろう。

実際、今までデバッガーとかでトレースしてたデータの流れや条件分岐といったものが、リアルタイムで視覚的に追えるというのは革新的だ。Unity社がわざわざ買収してまで手に入れたツールなのだ。できれば、こいつに全力で乗っかる方向で頑張りたい。

最終的には「Boltはともだち!こわくないよ!」と言い張れるようになりたいなぁ。

この記事が気に入ったらサポートをしてみませんか?