Skip to content
第07回 ビジュアルノベル4:結末の制作と配布

4 / 4 台本の配布とビルド後の更新 ​

このステップの目的

台本の変更がビルド後にも反映されることを確認し、台本だけで更新できる範囲を区別します。

ビルド後も台本を更新する ​

ここではWindows向けの実行ファイルで確認します。UnityのFile > Build Profilesを開き、Windowsのプロファイルを選びます。Scene ListにAssets/Scenes/SchoolCourt.unityが含まれていることを確かめ、Buildでプロジェクトとは別の出力フォルダーを指定します。出力した実行ファイルを起動し、会話を進められることを確認してください。

この教材の台本はStreamingAssets/Scenariosにあります。Windows向けにビルドすると、実行ファイルの隣のSchoolCourt_Data/StreamingAssets/Scenariosへコピーされます。そこでCSVを更新し、ゲーム内でRを押すと読み直せます。実行ファイルの名前を変えた場合は、対応する*_Dataフォルダーを使います。

文章、分岐、登録済み素材を呼ぶ命令の変更では、C#からゲームをビルドし直す必要がありません。新しい命令や、カタログにない画像・音を追加する場合はUnity側の変更と再ビルドが必要です。

出力先のintro.csvを別名で保存してから、台詞を一行変更します。UTF-8で保存し、実行中のゲームでRを押して反映を確かめます。確認後は元の台詞に戻してください。出力先の編集はUnityプロジェクトへ戻らないため、作品に残す変更はプロジェクト側のCSVにも反映します。

UnityのStreamingAssetsの説明のとおり、場所と取得方法はプラットフォームで異なります。配布コードはApplication.streamingAssetsPathとUnityWebRequestを使います。AndroidやWebでは、Windowsと同じように利用者が隣のファイルを書き換える運用にはできません。

発展:シーン入口の保存と再開

配布システムには任意のセーブ例があります。HierarchyのNovel SystemでEnable Save Exampleを有効にすると、F5で保存、F9で再開できます。保存先はApplication.persistentDataPathのschool-court-save.jsonです。

json
{
  "version": 1,
  "scene": "charge-homework",
  "variables": [
    { "name": "指示を確認", "value": 1 },
    { "name": "課題の記録", "value": 0 },
    { "name": "出席の記録", "value": 0 },
    { "name": "説得力", "value": 1 }
  ]
}

この例は保存した時点の行ではなく、現在のシーンの入口から再開します。保存する変数も、その入口の値です。途中まで進めた値で入口から再生すると、加算などを二重に行うおそれがあります。

NovelPlayer.ChangeSceneで入口の値を複製し、StoryCheckpoint.Saveで書き出します。LoadCheckpointは保存値を戻して台本を入口から読みます。

csharp
EntryCheckpoint = new StoryCheckpoint
{
    scene = name,
    variables = Machine.Snapshot()
};

同じ台詞の途中から厳密に戻すなら、命令の位置、表示中の文字数、背景と表情、音の状態なども考える必要があります。まず入口からの再開を試し、同じ反証を二重に数えないことを確かめます。セーブ機能の追加・改造は発展課題です。

実装例を確認する ​

自分の二つの結末を動かしてから、完成例プロジェクトを別フォルダーへ展開します。会話システムは開始版と共通です。台詞の順序、判決前の間、最後の見出しを自作の台本と比較してください。

完成例の文章を唯一の正解とする必要はありません。選択と結果がつながり、最後まで意図どおりに動くことが確認の基準です。

チェックリスト
  • 台詞を1行変更してRで読み直し、変更が表示されることを確認できましたか。台本だけで更新できる変更と、Unity側の再ビルドが必要な変更を一つずつ挙げてください。