こんにちは、YMYゲーム開発部です。

今回は、『夢酔のバーテンダー』の選択肢による分岐システムの開発についてお話しします。
Unity開発、分岐処理の実装、シナリオライターとのデータ共有で苦労した点や工夫をまとめました。
同じようにノベルゲームを開発している人の参考になればと思います!

今回の開発のポイント

  • 分岐の合流処理の実装
    分岐後に再び合流するパターンへの対応とフラグ管理の難しさ
  • コードとデータの管理手法
    可読性を高める書き方とスプレッドシートでの正規化されたデータ管理
  • 非エンジニアとの協業
    シナリオライターとのデータ共有で見えた課題と今後の改善案

開発環境

  • Unity:最新バージョン(常にアップデート)
  • OS:Mac
  • エディタ:Visual Studio Code
  • データ管理:Googleスプレッドシート
  • データ形式:CSV

分岐システムとは?

ノベルゲームでは、プレイヤーが選択肢を選ぶことで物語が分岐していきます。

『夢酔のバーテンダー』でも、プレイヤーの選択によって会話の流れが変わり、物語が進んでいく仕組みを実装しています。

分岐実装で一番苦労したこと:合流処理

開発を進める中で、「分岐後にそれぞれの分岐先ではなく合流する場合もある」
という新しい要件が出てきました。
分岐システムを実装していて、一番難しかったがこの分岐後に合流する処理でした。

何が難しかったのか

プレイヤーが選択肢を選ぶと分岐先に移行する処理を書いていたのですが、合流する場合は選択後の数回の会話の後に、何らかのフラグをきっかけに分岐から合流する処理を走らせる必要がありました。

そこの実装に手間取りました。

分岐管理の工夫:可読性とデータ設計

複雑な分岐システムを管理するために、コードとデータの両面で工夫をしています。

コードの可読性を高める工夫

分岐のif文をelseで書かない

分岐処理を書くときコードの可読性を上げるため、if文をelseで書かないように気をつけています
elseを多用すると、条件分岐がネストして処理の流れが追いづらくなります。

// ❌ elseを多用した例

// ✅ elseを使わずに改善した例

上の改善例のように、条件が成立した時点で早期returnすることで、

  • インデントが浅くなる
  • 無駄なelseが消え、見通しが良くなる
  • 新しい条件を追加しても修正箇所が少ない

基本テクニックだそうです。

データ管理の設計

Googleスプレッドシートでストーリーを管理

ストーリーはGoogleスプレッドシートで管理しています。

分岐については、正規化してリストでIDを指定する形にすることで、

  • データの整合性
  • 検索の効率性
  • 拡張性

これらを確保できるように開発しました。

シナリオライターとのデータ共有

ノベルゲーム開発では、エンジニアとシナリオライターの協業が不可欠です。
データ共有の仕組みと、そこで見えてきた課題についてお話しします。

データ共有の流れ

データ共有で困ったこと

上記の制作フローはシンプルな流れですが、実際の運用では課題も見えてきました。

システムの理解不足による齟齬

ストーリーを書く人は、当然ながらシステムを理解している訳ではありません。

そのため:

  • データの書き方で齟齬が生じ、書き直しが発生
  • 要件が追加されてデータとシステムの改修が度々発生

なかなかスムーズにはいかないですね….

スプレッドシートの限界

特に困ったのが、スプレッドシートが分岐が多くなるほど見づらくなることです。

分岐が多くなるほど、全体の流れが把握しづらくなります。
分岐の構造を視覚的に理解するのが難しいのです。

今後の改善案

これらの課題を踏まえて、次回ノベルゲームを制作する際には共有用のアプリを開発しようかなと思っています。

例えば、

  • ストーリーを書く人は図で線と線を繋げるだけで、分岐や会話、話者選択などを視覚的に編集
  • データはCSVで出力

このような共有アプリがあれば、

  • シナリオライターが直感的に操作できる
  • 分岐の全体像が把握しやすい
  • データの書き方の齟齬が減る
  • エンジニアとの連携がスムーズになる

まだ構想段階ですが、実現できたら開発効率が大きく上がると思います。


今回はノベルゲームの選択肢分岐システムの開発についてお届けしました。

分岐後の合流処理は想定外の難しさがありましたが、なんとか実装できました。
シナリオライターとの協業では課題も見えてきましたが、これも良い経験です。

今回の学びを活かして、よりスムーズな開発ができるよう工夫していきたいと思います。

次回はカクテル作成ミニゲームの制作(シェイカー機能の実装)についてお届けする予定です。
お楽しみに!