ビジュアルノベルのCSV命令表
このページを参照しながら、会話・選択肢・分岐・結末を持つ台本を書きます。ここでいうスクリプトは、会話システムが読むCSVの台本です。C#を書き換える必要はありません。
最初に動かす完成見本
配布する見本では、講師の指示に従うかを選びます。従うと会話を続けて終了し、逆らうと別のCSVへ移り、一枚絵のゲームオーバーになります。最初に両方を再生し、選択した後に何が変わるかを確かめてください。
一枚絵と本文だけを残したゲームオーバー画面
配布プロジェクトの準備
CSV台本制作用プロジェクトをダウンロードし、ZIPを展開します。Unity Hubから中のVisualNovelフォルダーを追加し、Unity 6000.5.5f1で開いてください。Packageの読み込みが終わったら、Assets/UNSLOW/VisualNovel/Scenes/SchoolCourt.unityを開き、Playします。前の回の完成物は必要ありません。
台本はAssets/StreamingAssets/Scenarios/にあります。まずintro.csvを編集します。CSVはUTF-8で保存してください。保存後、GameビューでRを押すと、変数とフラグを初期化して開始用の台本を読み直します。CSVだけの変更なら、Playを停止して起動し直す必要はありません。
会話はクリック、Space、Enterで全文表示または次の行へ進みます。選択肢はクリックか数字キーで決定します。
配布ファイル一覧
| ファイル | 用途 |
|---|---|
Assets/StreamingAssets/Scenarios/intro.csv | 一つの選択とフラグを使う開始用の見本 |
Assets/StreamingAssets/Scenarios/game-over.csv | 一枚絵と本文を表示する共通のゲームオーバー |
Assets/StreamingAssets/Scenarios/rule-choices.csv | 三つの掟について選ぶ完成見本 |
Assets/StreamingAssets/Scenarios/rule-branches.csv | 三つのフラグを8通りに分ける完成見本 |
Assets/UNSLOW/VisualNovel/Art/NovelCatalog.asset | 画像・音と、台本で使う名前の対応 |
Assets/UNSLOW/VisualNovel/Scripts/ | 実装済みの会話システム |
Assets/ThirdParty/ | 外部フォント・音源とライセンス文書 |
CSVの書き方
一行に一つの命令を書き、半角カンマで命令名と引数を区切ります。引数とは、その命令に渡す値です。たとえば背景,auditorium-courtは、auditorium-courtという名前で登録した背景を表示します。
# この行はコメント
背景,auditorium-court
テキスト,学生,通常,授業を始めます。空行と、行頭が#の行は読み飛ばします。見出し行として命令,引数1,引数2などを書く必要はありません。
| 書く内容 | 規則と例 |
|---|---|
| 命令名 | 下の表と同じ表記を使う。BGMとSEは英大文字 |
| 台本のファイル名 | 英小文字・数字・ハイフンを使う。例:game-over.csv。先頭は英小文字か数字 |
| 画像・音の登録名 | NovelCatalogにある名前を指定する。命令には拡張子を付けない |
| 人物名・表情名・変数名・ラベル名 | 日本語を使える。同じものを指す箇所では表記をそろえる |
| 空欄 | テキストと立ち絵の表情欄だけ省略できる。それ以外の引数は空欄にしない |
| 行末のカンマ | 引数が一つ増えるため付けない。選択,はい,いいえ,は空の選択肢があるためエラー |
| 秒数 | 0〜30。小数点には.を使う。例:0.3 |
本文に半角カンマを入れるときは、その欄を半角の二重引用符で囲みます。欄内の二重引用符は二つ続けて書きます。
テキスト,学生,通常,"Wait, please."
テキスト,学生,通常,"先生は""確認すること""と言いました。"
テキスト,地の文,-,前半の文。\n後半の文。本文中の\nは表示上の改行です。半角スペースを二つ続けた箇所も改行になります。CSVでは一つの命令を途中で実際に改行せず、一行に収めます。
命令表
書式の人物、本文、画像名などを、自分の台本で使う値に置き換えてください。命令は上から順に実行され、会話・選択・時間待ちに達すると、入力や時間の経過を待ちます。
命令の一覧
用途から命令を探し、下の解説で書式と引数を確認してください。
| 命令 | 用途 |
|---|---|
テキスト | 会話や地の文を表示する |
立ち絵 | 人物の表情を変える |
背景 | 通常の背景を表示する |
一枚絵 | 立ち絵や見出しを隠して一枚の絵を表示する |
見出し | 章名を表示する |
BGM | 音楽をループ再生・停止する |
SE | 効果音を一度再生する |
待機 | 指定した秒数だけ待つ |
フェード | 画面や画像を暗転・表示する |
終了 | 結末を表示して台本を終える |
選択 | 二択または三択を表示する |
変数 | 名前を付けた整数を記録する |
加算 | 記録した整数を増減する |
フラグ | 二つの状態のどちらかを記録する |
分岐 | 条件を満たしたときにラベルへ移る |
ラベル | 同じCSV内の移動先に名前を付ける |
ジャンプ | 条件を調べずラベルへ移る |
シーン | 別のCSVへ移る |
会話・画像・音の解説
テキスト
書式 テキスト,人物,表情,本文
引数の意味 人物は話し手の名前、表情は表示する立ち絵の表情、本文は表示する文章です。地の文では人物を地の文、表情を-にします。
例
テキスト,学生,通常,授業を始めます。
テキスト,地の文,-,講堂の扉が開いた。進み方 全文表示後の入力を待ちます。
立ち絵
書式 立ち絵,人物,表情
引数の意味 人物は絵を変える相手、表情は切り替え先の表情です。表情欄を空にすると現在の絵を維持します。
例
立ち絵,講師,怒進み方 表示を変えて次へ進みます。
背景
書式 背景,背景名
引数の意味 背景名はCatalogに登録した背景の名前です。一枚絵の表示中に使うと、通常の背景と立ち絵へ戻します。
例
背景,auditorium-court進み方 背景を変えて次へ進みます。
一枚絵
書式 一枚絵,画像名
引数の意味 画像名はCatalogのIllustrationsに登録した名前です。立ち絵と通常の見出しを隠し、絵の縦横比を保って表示します。
例
一枚絵,bad-end-bear進み方 絵を表示して次へ進みます。
見出し
書式 見出し,章名
引数の意味 章名は通常画面の上部に表示する文字です。一枚絵の間は見出しが隠れます。
例
見出し,第一の弁論進み方 見出しを変えて次へ進みます。
BGM
書式 BGM,曲名
引数の意味 曲名はCatalogに登録したBGMの名前です。停止を指定すると音楽を止めます。
例
BGM,school-trial進み方 ループ再生を始めて次へ進みます。BGM,停止も停止後すぐに次へ進みます。
SE
書式 SE,効果音名
引数の意味 効果音名はCatalogに登録したSEの名前です。
例
SE,desk-hit進み方 一度だけ再生します。音の終わりを待たず次へ進むため、台詞と同時に鳴らしたい場合は、その台詞の直前に置きます。
待機
書式 待機,秒数
引数の意味 秒数は次へ進むまでの待ち時間です。
例
待機,0.5進み方 指定した時間を待って次へ進みます。
フェード
書式 フェード,対象,向き,秒数
引数の意味 対象は全体または画像、向きはoutまたはin、秒数は変化にかける時間です。outは黒く覆う指定、inは黒い覆いを取り除く指定です。
例
フェード,全体,out,0.3進み方 フェードが終わるまで待ちます。0秒なら即座に変えて次へ進みます。
全体は文字を含む画面全体、画像は背景・立ち絵・一枚絵に作用します。暗転させて文字だけを読ませたいときは、画像を使います。
別CSVの読み込み直後は、全体が暗転した状態です。背景または一枚絵を指定してから、フェード,全体,in,0.3で表示してください。
終了
書式 終了,結末名
引数の意味 結末名は終了時に表示する文字です。一枚絵の表示中は、絵と最後の本文を残します。
例
終了,ゲームオーバー進み方 台本の進行を終了します。
選択・記録・分岐の解説
選択
書式 選択,選択肢1,選択肢2または選択,選択肢1,選択肢2,選択肢3
引数の意味 選択肢はプレイヤーに提示する文です。2〜3個を指定します。
例
選択,指示に従う,指示に逆らう進み方 選択を待ち、選んだ番号を選択結果へ記録して次へ進みます。
変数
書式 変数,名前,整数
引数の意味 名前は値を記録する変数名、整数は設定する値です。設定済みなら値を上書きします。
例
変数,説得力,0進み方 値を記録して次へ進みます。
加算
書式 加算,名前,整数
引数の意味 名前は設定済みの変数名、整数は現在の値に加える数です。負の数を指定すると減らせます。
例
加算,説得力,1進み方 値を変更して次へ進みます。
フラグ
書式 フラグ,名前,trueまたはfalse
引数の意味 名前は状態を記録するフラグ名です。trueは1、falseは0として記録します。
例
フラグ,講師の掟に逆らった,false進み方 状態を記録して次へ進みます。
分岐
書式 分岐,名前,比較,整数,ラベル名
引数の意味 名前は調べる変数やフラグ、比較は==などの比較方法、整数は比較する値、ラベル名は条件を満たしたときの行き先です。比較方法は下の表を参照してください。
例
分岐,選択結果,==,2,逆らう進み方 条件を満たすと同じCSVの指定ラベルへ移ります。満たさなければ次の行へ進みます。
ラベル
書式 ラベル,ラベル名
引数の意味 ラベル名は同じCSV内の移動先に付ける名前です。
例
ラベル,逆らう進み方 目印なので、そのまま次へ進みます。
ジャンプ
書式 ジャンプ,ラベル名
引数の意味 ラベル名は移動先の名前です。同じCSV内で定義したラベルを指定します。
例
ジャンプ,判定進み方 条件を調べず、指定ラベルへ移ります。
シーン
書式 シーン,台本名
引数の意味 台本名は移動先のCSVファイル名です。拡張子は書きません。game-overならgame-over.csvを読み込みます。
例
シーン,game-over進み方 移動先CSVの先頭から実行します。
選択結果と比較
選択番号は1から始まります。二択なら1または2、三択なら1〜3です。次の選択を実行すると選択結果が上書きされるため、後まで残したい選択は別のフラグや変数へ記録します。
加算と分岐で使う名前は、その前に変数またはフラグで設定してください。選択結果は選択後にシステムが設定します。フラグを比較する行の値には、整数の1または0を使います。
| 比較 | 意味 | 例 |
|---|---|---|
== | 等しい | 分岐,選択結果,==,2,逆らう |
!= | 等しくない | 分岐,説得力,!=,0,根拠あり |
>= | 以上 | 分岐,説得力,>=,3,反証成立 |
<= | 以下 | 分岐,説得力,<=,1,根拠不足 |
> | より大きい | 分岐,説得力,>,2,反証成立 |
< | より小さい | 分岐,説得力,<,3,根拠不足 |
ラベルと別CSVの違い
ラベルの有効範囲は、そのラベルを書いたCSVの中です。別のCSVでも同じラベル名を使えますが、一つのCSV内で同じ名前を二度定義するとエラーになります。移動先が後の行にあっても、名前が一致していれば参照できます。
シーンは読むCSVを切り替える命令です。UnityのSceneは切り替わりません。別CSVの途中のラベルへ直接移動する指定はありません。
別CSVへ移っても変数とフラグは引き継がれます。背景・立ち絵・本文・音は場面の入口で整え直すため、各CSVに必要な表示命令とBGMを書きます。物語全体で使うフラグの初期化は開始用のCSVへまとめ、途中で初期値に戻さないようにしてください。
指定できる素材名と表情
配布する台本制作用プロジェクトには、次の素材を登録してあります。登録先はAssets/UNSLOW/VisualNovel/Art/NovelCatalog.assetです。画像や音のファイル名を変えても、Catalogの登録名は自動で変わりません。
| 種類 | 登録名 | 内容 |
|---|---|---|
| 背景 | auditorium-court | 講堂の法廷 |
| 一枚絵 | bad-end-bear | 赤と黒のゲームオーバー画像 |
| BGM | school-trial | 会話・弁論の曲 |
| BGM | judgement | 判決の曲 |
| SE | desk-hit | 強く机を叩く音 |
| SE | desk-tap | 軽く机を叩く音 |
人物名は学生、講師、学長です。三人とも、表情は通常、喜、怒、哀、驚き、余裕、困惑から選んでください。表情欄を空にしたテキスト,学生,,そのまま話を続けます。では、現在の立ち絵は変わりません。一枚絵の間も、テキスト命令の表情で立ち絵を表示し直すことはありません。
新しい素材を使う場合は、画像をSpriteとして読み込んでから、CatalogのBackgroundsまたはIllustrationsへ登録します。音はMusicまたはSoundsへ登録します。登録名は英小文字・数字・ハイフンにそろえ、同じ種類では重複させません。外部素材を追加するときの配置と利用条件は、素材の登録と出典も確認してください。
選択から結末まで書く
intro.csv
配布したintro.csvの全文です。まず、二番目の選択肢を選んだときに通るラベルを、再生する前にたどってください。
背景,auditorium-court
BGM,school-trial
見出し,講師の掟
フラグ,講師の掟に逆らった,false
フェード,全体,in,0.3
テキスト,講師,通常,指示に従うかね?
選択,指示に従う,指示に逆らう
分岐,選択結果,==,2,逆らう
テキスト,学生,通常,指示に従います。
ジャンプ,判定
ラベル,逆らう
フラグ,講師の掟に逆らった,true
テキスト,学生,驚き,指示には従いません。
ラベル,判定
分岐,講師の掟に逆らった,==,1,ゲームオーバーへ
テキスト,講師,喜,では、授業を始めよう。
終了,授業を続ける
ラベル,ゲームオーバーへ
フェード,全体,out,0.3
シーン,game-over一番目を選ぶと、学生の返事の後にジャンプ,判定を実行します。このジャンプがあるため、下に並ぶ「逆らう」側の会話は実行されません。ラベルを置くだけでは、その前からの進行は止まりません。
二番目を選ぶと、フラグをtrueに変えます。「判定」ではその値を調べ、ゲームオーバーへ移るか、会話を続けて終えるかを決めます。
game-over.csv
# シーン,game-overで呼び出す共通のゲームオーバー。
BGM,停止
見出し,ゲームオーバー
一枚絵,bad-end-bear
フェード,全体,in,0.3
テキスト,地の文,-,死は誰の身にも等しく訪れる。
終了,ゲームオーバー一枚絵の表示後も、会話と同じ操作で本文を読み進めてください。終了に到達すると、絵と最後の本文が残ります。通常の会話へ戻す場合は背景,auditorium-courtを使います。
どのCSVも、最後は終了か、別CSVへ移るシーンで終えてください。何も指定せずファイルの末尾に達するとエラーになります。
自分の台本へ広げる
最初は上の例の台詞を変え、保存してRで確認してください。次に、選択肢の文を自分の会話に合わせて変えます。選択肢を入れ替えた場合は、番号を調べる分岐も合わせて直してください。
一つの選択が動いたら、単位と課題についても二択を加えてください。三つの名前を分けてフラグへ記録し、最後の判定に使います。複数の条件を調べるときは、分岐とラベルを組み合わせて次の判定へ進めてください。
| 講師の掟 | 単位の掟 | 課題の掟 | 結末の識別例 |
|---|---|---|---|
| 守った | 守った | 守った | 結末000 |
| 守った | 守った | 逆らった | 結末001 |
| 守った | 逆らった | 守った | 結末010 |
| 守った | 逆らった | 逆らった | 結末011 |
| 逆らった | 守った | 守った | 結末100 |
| 逆らった | 守った | 逆らった | 結末101 |
| 逆らった | 逆らった | 守った | 結末110 |
| 逆らった | 逆らった | 逆らった | 結末111 |
配布したrule-choices.csvとrule-branches.csvが、この8通りを分ける完成見本です。前者で選択を記録し、後者で判定します。単独で確認する場合は、Playを止め、Novel SystemのFirst Scenarioをrule-choicesにして再生してください。確認後はintroへ戻します。
各結末のラベルと終了の間に、自分の会話や演出を加えてください。共通のゲームオーバーにする枝はシーン,game-overへ接続できます。8通りの結末を区別したい場合は、それぞれの終了に異なる結末名を書きます。
保存と確認
次の項目を確かめてから、一つずつ台詞や演出を増やしてください。
- 最初のCSVに背景または一枚絵と、フェードインを書いた。
- 選択した番号と、その番号を調べる分岐が対応している。
- 後で使う選択を、別のフラグや変数へ記録した。
- 各枝から、合流・別CSV・終了のいずれかへ進める。
- 表の8通りを毎回Rから試し、予想した結末へ到達した。
| 表示や進行の問題 | 確認する箇所 |
|---|---|
| 空の引数がある | 行末のカンマ、空の選択肢、本文の書き忘れ。表情だけは空欄にできる |
| ラベルがない・重複している | 同じCSV内の名前と、分岐やジャンプの指定 |
| 未設定の変数 | 初期化より先に比較・加算していないか |
| 別CSVを読み込めない | ファイルの場所、英小文字・数字・ハイフン、命令側の拡張子の有無 |
| 画像や音がない | Catalogの登録名とSprite・Clipの参照 |
| 黒い画面のまま | 全体と画像のそれぞれに残った暗転。必要な対象へinを指定したか |
| 両方の選択の会話が続く | 最初の枝から合流へ移るジャンプや、枝ごとの終了 |
エラーにはCSV名と行番号が表示されます。該当行を直して保存し、Rで読み直してください。表示の変化を確かめる操作は命令と引数の実習、フラグの考え方は変数による記録も参照できます。
ライセンス
| アセット | 作者 | 提供元 | ライセンス |
|---|---|---|---|
| Courtroom and Judgement | Julie Damsgaard / Spring Spring / Spring Enterprises | OpenGameArt | CC0 1.0 |
| Impact Sounds | Kenney | Kenney | CC0 1.0 |
| UDEV Gothic | Yuko OTAWARA | UDEV Gothic | SIL Open Font License 1.1。配布物のAssets/ThirdParty/UDEVGothic/LICENSE.txtに同梱 |
音源はファイル名を変更していますが、音の内容は変更していません。SDF Font Assetは、同梱したフォントファイルから作成したものです。出典と加工の記録、各素材のライセンス文書は配布物のAssets/ThirdParty/にあります。背景・人物・一枚絵は本教材用の生成画像です。生成条件は配布物のimage-source.jsonで確認してください。