見出し画像

【Unity】「宴」で会話イベントを作る

会話させるにはどうするか

そのうちアドベンチャーゲーム的な奴を作りたいなーと思っているのだけれど、そのためには会話シーンの実装は必須だ。あと、会話中のキャラクター達に何らかの動きをさせる必要もあるだろう。

それをどう実現すべきかなーというのが今回の趣旨。

しかし、「会話系の処理をフルスクラッチで組むのは嫌だなー!どっかに便利アセットねえかなー!」と思って、手持ちのアセットを片っ端から漁ってみたところ、ビジュアルノベルツールの「宴」が目に入った。

この宴、普段は$88とお高めなのだが、たまーにバンドルでやたら安く手に入る事がある。そういや去年なんかのメガバンドルを買ったときに入ってたのでちょっと試したけれど、「ノベルゲー作るいうても絵心も文章力も無いしなぁ…」と思って放置していたのだ。

しかし、公式サイトをよくよく読んでると、バリバリのノベルゲー用途ではなく、会話イベントを組み込む用途でも使えるらしい。しかも、自作プログラムと連携もできると。なにそれ最強じゃん。これは試すしかない!

会話シーンに宴を組み込む

ぶっちゃけ公式を見れば難なくできたので、あえてここに書く事が無い。

ただしスクリプトファイルがおもっくそエクセルなので、LibraOfficeを別途インストールする必要があった。最近、表計算いうたらクラウドというかGoogleSpreadsheetしか使ってないもんなぁ…

画像3

とりあえず会話させる事はできた。が、まだキャラは動かない。

という訳で、スクリプトに何らかの命令を書いて、会話中にUnity上のオブジェクトを自在にコントロールしたい。そんな時はSendMessageを使えばいいとのことなので、そいつを使って実装してみる。

SendMessageでキャラクターを制御する

画像4

これも公式に書いてあるとおりにやったのだが、SendMessageを受け取るテキトーなオブジェクトを作って、そいつにテキトーなスクリプト(公式の例に則って、ReceiveMessageSample.cs)を作ってくっつけてやる。

画像7

そいでヒエラルキー上のAdvEngineから「AdvScenarioPlayer」を探し出して、「SendMessageTarget」にSendMessageを受け取るオブジェクトを設定。これで準備完了。

OnDoCommand()がシナリオに記載されてるSendMessageコマンドからデータを受け取った時のイベント。今回は、Talkだったらブレンドシェイプの口パクを呼び出して、MotionだったらAnimatorを遷移させてやりたい。command.Arg(n)は、シナリオに記載されている引数をそのまま取得できるようだ。

今回はC#スクリプトからGameObjectに引っ付けているBoltスクリプトに対してイベントを出すので、CustomEvent.Trigger()を使用している。呼び出す対象がC#スクリプトのメソッドでもだいたい同じ感じになるだろう。

画像7

シナリオ側はこんな感じで書いておく。タンクトップくん(あば太)が「オッスオッス!」を表示する直前に、口パクと話すモーションを再生するような形だ。

画像7

さっきくっつけたスクリプトのインスペクタ上はこんな感じ。

画像8

あとは、操作対象のGameObjectにくっついてるBoltのフロー側でCustomEventを定義しといてやればそれが呼び出されるので、好きな処理を書き殴ってやる。

成果物

こんな感じで、やりたい事があっさりと実現できた。今回のやり方を応用すれば他の事もいろいろできそう。うはー夢が広がりんぐ!(死語)

しかし、宴の持つポテンシャルを引き出すには色々とコマンドを覚える必要がありそうなので、それはそれで勉強が必要だなぁ。

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