2020-05-27に投稿

宴3でルート分岐チャートを実装する

Unity上で動くノベルゲームエンジンはいろいろありますが、
わたしは宴が好きです。
日本式のノベルゲームに必要な機能は全部入っているくらいに機能が充実しているのはもちろんのこと、
初心者でも扱える簡便さとスクリプトでの細かいカスタマイズを両立しているのが特徴です。
そんな宴をベースに、今回はシナリオチャート画面を実装していきます。

チャート

「ボタンを押すと対応するシナリオラベルに飛ぶ」Buttonをつくる

チャート画面に必要なのは、この機能を持ったButtonを並べることです。
対応するシナリオラベルから開始するのは、以下のコードで実現できます。

“Create New Adv Scene”で作成したノベルゲーム用のシーンの場合、
AdvEngineではなく、MainGameのほうのメソッドを呼ぶ必要があります。

[SerializeField]
private UtageUguiMainGame mainGame = default;

public void LoadLabel(string label)
{
      Close();
      mainGame.OpenStartLabel(label);
}

スクリプトから直接ジャンプしてしまうので、そのシナリオラベルが本当に存在するかどうかには十分注意しておきます。

そのシーンが既読であるかどうか判定する

このままだと開始直後から好きなシーンにジャンプできてしまうので、
シーンが既読であるかを判定して、未到達ならジャンプを拒否するようにします。

そこで、シナリオラベルから”*”を取って”済”を足したものをそれぞれ全てパラメータとして定義し(!)、
シーンの最後に対応するパラメータをTRUEにするParamコマンドを挿入しておきます(!!)。
スクリプト側ではそれを GetParameter() で取得するようにします。
(このあたりは、1週間の短期開発だったこともあり、だいぶ力技になってしまっています)

public bool IsSumi(string label)
{
    string sumi_key = label.Replace("*", "") + "_済";
    return Engine.Param.GetParameter(sumi_key);
}

public void LoadLabel(string label)
{
    if (IsSumi(label))
    {
        Close();
        mainGame.OpenStartLabel(label);
    }
    else
    {
        _Non.SetActive(true);
    }
}

Canvasにボタンを配置する

あとはこれをいい感じにCanvas内に配置すれば完成です。
bokusyu00.png

ツイッターでシェア
みんなに共有、忘れないようにメモ

ドッグ

C++er見習い。でしたが最近はC#にほだされつつある

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!
ボードとは?

コメント