【Unity】NaniNovelの会話システムのみを利用する

2019/07/30DEVELOP, NaniNovel, Unity

Unityのビジュアルノベル用アセットNaninovel はテキストベースのビジュアルノベルシステムで、インストールした直後は完全なるビジュアルノベルシステムとして動作し、シーンを再生開始すると一般的なタイトル画面が表示され、即座に作り始めることが出来ます。

シンプルにビジュアルノベルを開発する場合、これは素晴らしい配慮です。しかし「会話システムだけが欲しくて、そのために「NaniNovel」を利用したい」そんなことは多々あります

今回は、NaniNovelを使って会話システム部分のみを利用するための手順を解説しようと思います。

動作確認バージョン

  • Unity 2019.1.9f1
  • Naninovel 1.7

手動による初期化

NaniNovelをインストールした直後では、前述の通り自動的にノベルシステム用のエンジンが初期化され、その後タイトル画面へと遷移します。会話システムだけが欲しい場合、この遷移は不要であり、手動でエンジンを初期化する様にしましょう。

メニューのNaninovel->Configurationを選択し、設定メニューを開きます。

まず最初に、エンジンの[Initialize On Application Load]オプションを無効にします。無効にすることで、ノベルシステムが自動で開始されずに済みます。

デフォルトでは有効になっています

エンジンの初期化コード

using System.Collections;
using UnityCommon;
using UnityEngine;
public class Main : MonoBehaviour
{
    IEnumerator Start()
    {
        // ノベルシステムの初期化
        Naninovel.RuntimeInitializer.InitializeAsync().WrapAsync();
        // 初期化待ち
        yield return new WaitWhile(() => Naninovel.Engine.IsInitialized);
    }
}

エンジンの初期化は非常にシンプルです[RuntimeInitializer.InitializeAsync]メソッドを使用してエンジンを初期化します。エンジンが現在[Engine.IsInitialized]メソッドで初期化されているかどうかが確認できます。

また[Engine.OnInitialized]で初期化終了イベントを受け取ることが出来ます。どちらでも好みの初期化方法を選択すると良いでしょう。

using System.Collections;
using UnityCommon;
using UnityEngine;
public class Main : MonoBehaviour
{
    void Start()
    {
        // ノベルシステムの初期化
        Naninovel.RuntimeInitializer.InitializeAsync().WrapAsync();
        // 初期化完了通知
        Naninovel.Engine.OnInitialized += ()=>
        {
            Debug.Log("エンジンの初期化完了!");
        };
    }
}

エンジンの破棄

Naninovel.Engine.Destroy();

全てのエンジンのサービスを終了するには[Engine.Destroy]メソッドを使用します。

タイトルメニューを無効にする

エンジンが初期化されるとデフォルトの組み込みメニューが自動的に表示されますが、会話システムのみを利用したいときには不要です。組み込みメニューを消すには、エンジン設定メニューの[Show Title UI]オプションを無効にします。

スクリプトの再生

指定された名前でnaninovelスクリプトを再生するには[Naninovel.ScriptPlayer]クラスの[PreloadAndPlayAsync]でスクリプトをロード・再生します。

using UnityCommon;
using UnityEngine;
public class Main : MonoBehaviour
{
    private void OnDestroy()
    {
        // 破棄
        Naninovel.Engine.Destroy();
    }
    void Start()
    {
        // ノベルシステムの初期化
        Naninovel.RuntimeInitializer.InitializeAsync().WrapAsync();
        // 初期化完了通知
        Naninovel.Engine.OnInitialized += ()=>
        {
            Debug.Log("エンジンの初期化完了!");
            // シナリオ再生!
            var player = Naninovel.Engine.GetService<Naninovel.ScriptPlayer>();
            player.PreloadAndPlayAsync("NewScript").WrapAsync();
        };
    }
}

動作例

再生開始すると、すぐにスクリプトの再生が始まります。

コントロールパネルを消したい

ただのメッセージ表示システムとして使うのであれば、ダイアログメッセージ下の各種機能も削除したくなります。特にセーブ・ロードメニューはゲームによっては不要です。

カスタムダイアログPrefabを作成する

[Assets/Naninovel/Resources/Naninovel/TextPrinters]にDialogue.prefabがあるのでこちらを複製します。名前はCustomDialogue.prefabとでもしておきましょう。複製出来たら エンジンのPrefabと混同すると分かり辛くなるので[Assets/Resources/TextPrinters] に移動させます。フォルダがなければ作成します。移動出来たらCustomDialogue.prefab を開きます。

開くとPrefabの中にControlPanel GameObjectがあるので機能として不要なものを削除する。

まるごと不要であればControlPanel GameObjectをまるごと削除する

削除できたら保存しておく。

リソースの登録

メニューバーの[Naninovel]->[Resources]->[Text Printers]を選択し、先ほどのCustomDialogを登録します。

名前はCustomDialogueという風に合わせておきます。

登録したリソースの詳細は、右端の詳細ボタンを押すことで確認できます。

右端の詳細ボタンを押すと・・・
登録したリソースの詳細設定画面に移動する

リソースの読み込みはPath Prefixで指定された場所からロードできる様になっています。初期値はTextPrintersと設定されています。先ほど配置したCustomDialogue.prefabを配置した場所がAssets/Resources/TextPrintersだった理由はこれです。

初期ダイアログの設定

リソースの登録が出来ればあと一歩です。メニューバーの[Naninovel]->[Configuration]->[Text Printers]を開きます。その中のDefault Printer Idを[CustomDialogue]に変更します。

実行結果

ここまで出来たら実行してみましょう。CustomDialogueのPrefabが読み込まれ、複製したのダイアログが表示されます。

アセットはこちら

Posted by kazupon