Help us understand the problem. What is going on with this article?

宴のカスタムコマンド作成について

More than 3 years have passed since last update.

「宴」とは?

「宴」はビジュアルノベルをUnityで簡単に作成するためのツールです。シナリオデータはExcelでシンプルに書けるので、複雑なスクリプトの文法を覚える必要はありません。Unityを使っているためPCだけでなく、スマートフォンやブラウザ用のアプリを作ることもできます。ビジュアルノベルに限らず、ゲームの会話シーンの作成を作ることもできます。

(公式サイトより引用)

また、「宴」はアセットストアで購入・ダウンロードが可能です。
https://www.assetstore.unity3d.com/jp/#!/content/15905

カスタムコマンドとは?

「宴」ではカスタムコマンドを作成することで、Excelで使用できるコマンドに独自のものを追加することができます。
Debug.Logを呼び出すサンプルの説明が公式サイトにあります。
http://madnesslabo.net/utage/?page_id=3195

作成例

ではさっそくカスタムコマンドを作成してみます。
どうせ作るなら今までにない機能を「宴」に追加してみたいですね…。

と思っていたらTwitterでこんな動画が!これは「宴」から動かせたら面白いかも…(棒)

ソースも公開されているので、これを「宴」のカスタムコマンドから呼び出すようにしたいと思います。

    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に以下のように記述することで…

Excel.png

アセットコンテスト大賞受賞おめでとうございます!

ちょうど本日結果が発表されたUnityアセットコンテストで、「宴」は大賞を受賞しました!
おめでとうございます!

http://blogs.unity3d.com/jp/2015/12/24/unityassetcontestjp1st/

そしてメリークリスマス!

以上、12日目に続きUnity 2 Advent Calendar 2015の24日目として書かせていただきました。

さて、今夜はクリスマスイブ。ひとりで過ごしたり勉強会に参加したり、いろいろな過ごし方があると思いますが、今回作成したカスタムコマンドを使えばUnityとより親密な夜を過ごせるんじゃないでしょうか。
ではぼくはクリスマスプレゼントを買って家に帰ります。みなさんいい夜を!

tnayuki
小規模なIT企業にてCTOをしております。しておと呼んでください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした