「宴」とは?
「宴」はビジュアルノベルをUnityで簡単に作成するためのツールです。シナリオデータはExcelでシンプルに書けるので、複雑なスクリプトの文法を覚える必要はありません。Unityを使っているためPCだけでなく、スマートフォンやブラウザ用のアプリを作ることもできます。ビジュアルノベルに限らず、ゲームの会話シーンの作成を作ることもできます。
(公式サイトより引用)
また、「宴」はアセットストアで購入・ダウンロードが可能です。
https://www.assetstore.unity3d.com/jp/#!/content/15905
カスタムコマンドとは?
「宴」ではカスタムコマンドを作成することで、Excelで使用できるコマンドに独自のものを追加することができます。
Debug.Logを呼び出すサンプルの説明が公式サイトにあります。
http://madnesslabo.net/utage/?page_id=3195
作成例
ではさっそくカスタムコマンドを作成してみます。
どうせ作るなら今までにない機能を「宴」に追加してみたいですね…。
と思っていたらTwitterでこんな動画が!これは「宴」から動かせたら面白いかも…(棒)
UnityのサイクロンX10(電動オナホール)対応できたよー。回転パターン10種類・強弱10段階をUnityから制御可能!Windows対応。これぞちんマシンインターフェイスや!! https://t.co/g9oHuqVd40 pic.twitter.com/KZOl6gvKiP
— tnayuki (@tnayuki) 2015, 11月 4
ソースも公開されているので、これを「宴」のカスタムコマンドから呼び出すようにしたいと思います。
public class CustomCommandCycloneX10 : AdvCustomCommandManager
{
public override void OnBootInit()
{
Utage.AdvCommandParser.OnCreateCustomCommnadFromID += CreateCustomCommand;
}
public override void OnClear()
{
CycloneX10 cycloneX10 = GetComponent<CycloneX10>();
if (cycloneX10)
{
cycloneX10.pattern = 0;
cycloneX10.level = 0;
}
}
public void CreateCustomCommand(string id, StringGridRow row, AdvSettingDataManager dataManager, ref AdvCommand command)
{
switch (id)
{
case "CycloneX10":
command = new AdvCommandCycloneX10(row);
break;
}
}
}
まず、AdvCustomCommandManagerを継承したクラスを作成します。
OnBootInitが初期化時に呼ばれるので、そこでカスタムコマンドを作成するデリゲートを追加します。
コマンド名は「CycloneX10」とします。
また、シナリオ終了時にOnClearが呼ばれるので、回転を止める処理を書いておきます。
public class AdvCommandCycloneX10 : AdvCommand
{
public AdvCommandCycloneX10(StringGridRow row)
: base(row)
{
this.pattern = ParseCell<int>(AdvColumnName.Arg1);
this.level = ParseCell<int>(AdvColumnName.Arg2);
}
public override void DoCommand(AdvEngine engine)
{
CycloneX10 cycloneX10 = engine.GetComponent<CycloneX10>();
if (cycloneX10 == null)
{
cycloneX10 = engine.gameObject.AddComponent<CycloneX10>();
}
cycloneX10.pattern = pattern;
cycloneX10.level = level;
}
int pattern;
int level;
}
次に、実際にコマンドの処理を行うためのAdvCommandクラスを継承したクラスを作成します。
コマンド処理クラスにはコンストラクタでExcel上のコマンド行の情報が渡されるので、それをパースして保管します。
実際に処理を行う際はDoCommandメソッドが呼ばれます。ここではサイクロンX10を制御するためのコンポーネントを(なければ追加してから)呼び出します。Arg1を回転パターン、Arg2を回転の強さとしました。
作成したソースは以下にまとめて公開しました。
https://github.com/tnayuki/Unity-UtageForCycloneX10
使用方法
まず作成したカスタムコマンドマネージャをシーン中のAdvEngineに追加します。
さらにExcelに以下のように記述することで…
ふむ…セリフの前後で回転パターンが変わっているのがお分かりいただけるだろうか? pic.twitter.com/iZE0yvhXrt
— tnayuki (@tnayuki) 2015, 12月 24
アセットコンテスト大賞受賞おめでとうございます!
ちょうど本日結果が発表されたUnityアセットコンテストで、「宴」は大賞を受賞しました!
おめでとうございます!
そしてメリークリスマス!
以上、12日目に続きUnity 2 Advent Calendar 2015の24日目として書かせていただきました。
さて、今夜はクリスマスイブ。ひとりで過ごしたり勉強会に参加したり、いろいろな過ごし方があると思いますが、今回作成したカスタムコマンドを使えばUnityとより親密な夜を過ごせるんじゃないでしょうか。
ではぼくはクリスマスプレゼントを買って家に帰ります。みなさんいい夜を!