Scenario Data Builder(Utage3版)


投稿日:2023年12月1日 | 最終更新日:2023年12月1日

「宴」のプロジェクト設定ファイル(.project)を編集するためのツールです。
主にExcelファイルやリソースのインポート設定のために必要となります。
インポートとは、Excelファイルやpngファイルなどを、Unityや宴が読み込める形に変換する処理のことで、このツールで変換処理のための設定を細かく調整することが可能です。
基本的には、今開いているシーンのプロジェクトが自動設定されていますが、作成済みのプロジェクト設定ファイル(.project)を設定することも可能です。


リファレンス

名前 内容
Project 現在設定しているシナリオプロジェクト
AutoImportType 自動インポートのタイプ詳細
Always:常に。宴のないシーンでも自動インポートされる。
On Utage Scene:宴のあるシーンでのみ
None:自動インポートしない
Chapters ビルド対象のエクセルファイル
複数の章ごとに分けて管理でき、各章にも複数のエクセルファイルを設定可能
ここに設定されているエクセルが更新されると、自動でシナリオアセットがインポートされる
ChapterName:章の名前
ExcelList:その章で使うシナリオのリスト
ExcelDir:その章で使うシナリオのフォルダ(ここ以下にあるエクセルすべてをシナリオとして読みこむ)
「エクセルファイルを複数使ったり、章ごとに分けてシナリオファイルを管理する」も参照してください
Check Wait Type ウェイトタイプが適切に設定されているかチェックする。(宴2を引き継いだままの古い形式ではオフにするとチェックしない)
Check White Space エクセルデータの末端などに空白が混じっていないかをチェックする
Check Text Count 文字数をカウントしてチェックする。同時にメッセージウィンドウ内に収まるかどうかもチェックする。
大量にテキストがあると処理負荷が高いので、その場合はチェックを外すと軽くなる
Check Text Count All Language テキストカウントのチェックを、すべての言語に対しても行う。
Quick Auto Import 自動インポートを高速化する。詳細は下記
Quick Auto Import Type 自動インポートを高速化する詳細設定。詳細は下記
Parse Fomula エクセルの関数などを反映したテキストを使う。詳細は下記
Parse Numreic エクセルの関数などを反映したテキストを使う。詳細は下記
Comment Out On Import インポートの時点で、コメントアウトされたデータを削除する詳細は下記
Check Blank Row Count On Import エクセルシートの終端に空のデータが指定行数以上ある場合はインポート時に警告を出す詳細は下記
Check Column Count On Import エクセルシートの終端が指定列数以上ある場合はインポート時に警告を出す詳細は下記
Import 設定されたエクセルファイルをインポートする
「FilePath Check On Import」インポート時に、エクセル上で設定した画像や音声のファイルが実際に存在するかチェックする設定。詳細は後述 名前 内容
Resource Dir 素材のルートディレクトリの設定。
初期状態であれば、「プロジェクト名/Resources/プロジェクト名」となっているフォルダを設定。
フォルダが設定されていない場合は、ファイルパスのチェックがされない
Check Ext 拡張子の一致をチェックするか。
UnityのResources読み込みは拡張子まではチェックしないため、基本的には拡張子は不一致でも問題ない。
AddressabelAssetBundleを使っているなど、拡張子まで正確チェックしたい場合はここをオンにする
リソースのインポーターの自動設定。 名前 内容
Custom Import Folders ここに設定されたフォルダ以下のテクスチャやサウンドは、インポート設定が自動的に設定されます。
インポート設定を手動で行う場合はここからフォルダを外してください


Convert Settingは、古いタイプのサーバーからのダウンロードファイルのための設定です。基本的には使用しないでください
名前 内容
Convert Setting コンバート用の設定。シナリオをDLコンテンツとする場合には、エクセルファイルからTSVにコンバートする必要があるので、そのための設定
Output Directory コンバートしたTSVファイルの出力先フォルダ。Unityプロジェクト内である必要はないので、MyDocument以下などでも構わない
Version シナリオファイルの管理バージョン。DLコンテンツはキャッシュファイル機能を使うのでシナリオファイルを更新をするときはバージョン番号を上げること
Auto Update Version Convert時に、前回よりも+1したバージョン番号に自動更新する
Auto Convert On Import インポート時(エクセルファイル更新時)に、自動的にコンバートもする
Convert エクセルファイルをTSVにコンバートする

Unity2020.2~で不具合

Unity自体のバグで、Unity2020.2からシナリオデータビルダーのUIが正常に動作しなくなっています。
詳細と対応方法はこちらをご確認ください

AutoImportType

エクセルを保存したときなどに自動でインポート処理をかける処理の条件を設定します。
Alwaysを設定すると、宴のないシーンであっても常にインポート処理が走るようになります。
会話シーンなどで使用する場合などで、宴のないシーンをメインで作業している場合などで使用してください。
ただし、宴のあるシーン内にあるファイルマネージャーやメッセージウィンドウなどを参照できなくなるため、ファイルパスのチェックや文字数あふれのチェックなどができなくなる点に注意してください。
また、Version3.10.0以前ではインポート時のエラーメッセージがローカライズされないなどの不具合があります。
Version3.10.1以降では修正しましたが、アップデート後に一度だけ宴のあるシーンを開かないと変更が適用されないため、一度だけ宴のあるシーンを開いてください。

Quick Auto Import

エクセルを上書き、更新すると自動的にUnity上でインポート処理が走ります。
ただ、この場合に「設定したすべてのエクセルを開いてインポートする」という処理が走るため、シナリオが多いとその処理にけっこう時間がかかってしまいます。
原因としては、(宴のシナリオを解析する部分ではなく)エクセルファイルを開くこと自体に時間がかかってしまうためです。
どうもxlsxファイルだとより重いようで、場合によっては1ファイル開くのに2~3秒。結果として10個もファイルがあれば2~30秒かかってしまうようです。
それと、メモリ負荷も相当かかっているようです。(低スペック機だとフリーズしかねない)

対策として、
・Qucik Auto Import Type [Warning]
という機能を追加しました。
これは、エクセルファイルを上書きしたとき、自動でされるインポート処理を簡易的に行って高速化するためのものです。
クイック処理が有効だと、「書き換えたエクセルファイルのみの更新をインポート」します。
つまり、更新していないエクセルファイルは開かないので、処理が早くなります。

名前 内容
None クイックインポートをしない
Quick 更新のあったエクセルのみ再インポートし、
全チャプターをロードしてエラーチェックします。
Quick Chapter 更新のあったエクセルのみ再インポートし、
そのファイルが含まれるチャプターのみロードしてエラーチェックします。
ほかのチャプターに依存するシナリオデータが必要な場合は、エラーになってしまいます。
Quick Chapter With Zero Chapter 更新のあったエクセルのみ再インポートし、
チャプター0とそのファイルが含まれるチャプターのみロードしてエラーチェックします。

基本的には、Quickを使ってください。
チャプター0番に共通設定・共通リソースを設定し、その他のチャプターを個別でダウンロードできる構成にしている場合は、「Quick Chapter With Zero Chapter」を使うと、さらに高速化できます。

マクロシートを使う場合

マクロシートを書き換えた場合は、他のエクセルファイルにそのマクロの変更は適用されくなってしまうので注意してください。
たとえば、エクセルファイルAに書いているマクロを書き換えた場合、
エクセルファイルBでそのマクロを使っていたとしても、変更が適用されなくなってしまいます。
(エラーや警告も出せません)

そういう場合は、ScenarioDataBuilderでImportボタンを押すと、全エクセルファイルを今まで通りインポートしますので、
マクロシートを書き換えた場合はこちらからインポートしてください。
またはQuick Auto Importを使わないようにしてください。

想定する使い方

・マクロシートは、一つのエクセルファイル(管理マスター的なエクセルファイル)にまとめて管理
・通常のシナリオファイルの更新→自動インポート
・マクロの更新したとき→ScenarioDataBuilderでImportボタンを押す
・チーム作業での共有コミットや、リリースなどいったんちゃんとした更新をかけるとき→→ScenarioDataBuilderでImportボタンを押す
という使い方を想定しています。
基本的には「頻繁に更新→テストを繰り返すときに重い」ときだけ使用してください。
ただ、あくまでテストのための高速化なので、うっかりミスでマクロの更新が適用されないままになってしまうケースもあると思いますので、
安全性を優先するのであれば、オフのまま使ってください。

旧式のフラグ

Qucik Auto Import[Warning] はオンオフのみで、細かい設定ができない旧式のものです。
互換性のために残していますが、基本的にはオフにして、Qucik Auto Import Typeを使ってください。

Parse Fomula

エクセルの関数などを反映したテキストを使うためのものです。
エクセル関数を使いたい場合のものなので、基本的にはオフのままで使ってください。
詳しくはこちらに

ただ、ファイル形式がxlsかxlsxかや、WindowsかMacかで挙動が変わるなど、不安定なようです。
(これはNPOIというエクセル解析用のライブラリの動作なので、宴側では修正困難です)
TEXT(1 + 1、 "#") のように、TEXT()関数で囲むと安定するようですので、試してみてください。

Parse Numreic

エクセルの記入の際に、桁区切り機能など数字に特有な記述をしている場合はこれを使ってください。
ただし、(あまりない例だと思いますが)逆に「桁区切りの数字を記述した文字列」つまり「1,000」という文字列は「1000」という文字列として認識してしまう恐れがあるので注意してください。

Comment Out On Import

インポートする時点で、エクセル内のデータでコメントアウトされているデータを全て削除して空欄にします。
デフォルトではOnですが、デバッグ情報の出力などをわかりやすくするために、コメントを残したい場合はオフにして、リリース時にはオンにしたものをインポートするなどして運用してください。

Check Blank Row Count On Import、Check Column Count On Import

エクセルデータの終端が10万行目などにはるか遠くに設定されている場合に、インポート時に空の列や行のデータも解析する必要があり、処理が重くなってしまいます。
対策として、「Check Blank Row Count On Import」で終端の空行数を、「Check Column Count On Import」列の最大数をチェックできるようにしました。
エクセルデータの終端はエクセル上で「Ctrl+End」で確認できるので、余計なデータが多くなりすぎないようにしてください。
参考 : ワークシートの最後のセルを特定してリセットする

また、Version3.10.0以前では、空の終端行などもインポート後のデータに含まれてしまっていたため、インポート後のデータが1GBなど巨大になってしまうことがあります。
この状態になると、Unityエディタ上でゲームプレイをしたときやコンパイル後などに数十秒単位で「Restore Managed References」というUnityのダイアログが出るようになってしまいます。
Version3.10.1以降では空の終端行はインポートから除外するようにしているため、心当たりのある場合はアップデートをお勧めいたします。

FilePath Check On Import

宴ではエクセル上で指定したファイルが存在しなかった場合、実際のゲーム中にエラーになります。
デフォルト設定ではシステムダイアログでエラーメッセージが表示されます。会話シーンなどでシステムダイアログがなかったとしても、Consoleにエラーメッセージが出ます。
ただ、ゲーム実行して実際にファイルをロードする箇所にならないとエラーがでないというのはエラーチェックがしづらいため、シナリオのインポート時にチェックができるようにしました。
「Resource Dir」に、素材のルートディレクトリとなるフォルダを設定することで、チェック機能が有効になります。

ファイルパスにエラーがある場合は、インポート後にコンソールにエラーがでます。

注意点

ファイルパスのチェックは、エンティテイ機能を使って動的に変更される素材にはうまく機能しない可能性があります。
また、ファイルロード機能をカスタムしている場合もうまく機能しない可能性があります。
StaticAssetManagerに設定したアセットは考慮しますが、それ以外はあくまで設定したルートディレクトリ以下にファイルが存在するかだけしかチェックしません。
チェック対象のルートディレクトリはResources以下以外においても大丈夫ですので、アセットバンドルやAddressabelAssetBundleを使う場合であっても、元となる素材のルートディレクトリさえ設定すればチェックが可能かと思います。
それ以上の細かい設定が必要な場合は、Q&Aなどに要望をお願いします。