Unity 宴3でExcelからノベルゲームを起こす
宴はMadnessLabo氏によって開発されたUnityのビジュアルノベル作成ツールで,第1回アセットストアコンテストグランプリに輝いたアセットです.
ビジュアルノベル作成のみならず,ゲームの会話シーンも作成できます.
目次
セットアップ
アセットストアから宴ver.3を購入したら,Tools>Utage>NewProjectで新規プロジェクトを作ります.
アセットのUtageフォルダは移動・変更しません.
ただし,その中に含まれるSampleフォルダは使用しないので,ビルドのときには削除します.
プロジェクト
プロジェクト名のついたフォルダが作られたら,プロジェクト名のついたエクセルのファイルがあります.
シナリオ等はこのエクセルファイルで編集します.
分岐等以外の箇所では,Excelのシナリオシートの上行から順にシナリオが進んでいきます.
また,素材をリソースフォルダに置いておけば,エクセルのファイルで指示された通りに音声や画像を呼び出してくれます.
ヒエラルキー
ヒエラルキーにはとりあえずは触る必要ないコンポーネントたちがあります.
細かい調整が必要になったときに使います.
- Managers:システム管理のコンポーネント
- AdvEngine:シナリオ再生のコンポーネント
- AdvEngine Starter:ロード関連の設定
コマンド
ビジュアルノベルでは使用素材を表示したり切り替えることで,場面や登場人物を動かしていきます.
Excelには素材を登録するシートと,シナリオのシートがあり,シナリオシートではコマンドを記述することで使用素材の表示や切り替えなどを行います.
シートには第1行にArg1などの列名がそれぞれ入っており,引数を記述できるようになっています.
画像
画像に関するコマンドは以下の通りです.
Bg
背景BgEvent
イベント画像(立ち絵は出ない)Sprite
スプライト(Arg1 = スプライト名(異なる名前なら複数表示可,後から呼んだものが手前),Arg2 = ラベル)Particle
パーティクル(火,水,煙などチリチリする動き)
これらは
- Arg1 = ラベル
- Arg3 = レイヤーの指定
- Arg4 = x座標, Arg5 = y座標
- Arg6 = フェード秒
を持ちます.
また,CharacterOff
やBgOff
のようにOffをつけたコマンドで非表示化します.
非表示にするときの引数は
- Arg1 = ラベル(空欄なら全消し)
- Arg6 = フェード秒
です.
素材はResources>Texture以下の適当なフォルダに置き,エクセルのTextureシートに登録します.
Label,Type(Bg
かEvent
かSprite
か),FileName(Bgフォルダ等以下の相対パス)は入力必須です.
レイヤー
レイヤーとは絵を描く透明なシートのようなもので,重ね置きすることで画像に前後関係をつけることができます(1人に1レイヤー).
LayerOff
指定レイヤー上のオブジェクトを全て非表示LayerReset
指定レイヤーを初期状態に
引数は
Arg1 = ラベル
Arg6 = フェード秒(LayerOff
のみ)
です.
使用するレイヤーはエクセルのLayerシートで設定します.
LayerName,Type,Order(描画順)は入力必須です.
立ち絵
他の画像同様,引数は
- Arg1 = ラベル
- Arg3 = レイヤーの指定
- Arg4 = x座標, Arg5 = y座標
- Arg6 = フェード秒
です.
Arg2は登場パターンに使われます.
- (なし) キャラクター立ち絵 (Arg2 = 登場パターン,
<off>
と書けば立ち絵だけ出ない)
CharacterOff
で非表示にできます.
素材はResources>Texture>Characterに置き,Characterシートに登録します.
CharacterNameとFileName(Characterフォルダ以下の相対パス)は入力必須です.
キャラクターをエクセルに登録しなかった場合は,Arg1に入れた名前が付き,立ち絵なしとなります.
もしArg1が空白であれば,ただのテキストとなります.
サウンド
サウンドに関するコマンドは以下の通りです.
Se
サウンドエフェクト(=「ドン!」などの効果音)Bgm
BGM(ずっと流しておくゲームの音楽)Ambience
環境音(喫茶店のカップの音や鳥のさえずりなど舞台となる場所で時々聞こえる音)
引数は
- Arg1 = ラベル
- Arg2 = ループの
TRUE
/FALSE
(BGMはTRUE
) - Arg5 = 前の曲をフェードアウトする時間(BGMと環境音のみ)
- Arg6 = フェード秒
をとります.
Excelのシートで左右両端になるArg1, 6は,画像同様,ラベルとフェードに充てられています.
素材はResources>Sound以下の適当なフォルダに置き,Soundシートに登録します.
Label,Type(Se
かBgm
かAmbience
か),FileName(Seフォルダ等以下の相対パス)は入力必須です.
ボリューム
ChangeSoundVolume
でボリュームを変更できます.
引数は
- Arg1 = Type(
Se
かBgm
かAmbience
か) - Arg2 = ボリューム(0〜1の値)
- Arg6 = フェード秒
です.
ボイス
Voice
を入れ,Voice列にボイスファイル名を指定します.
基本的に1回使いきりの音であるサウンドエフェクトと同様に,
- Arg1 = ラベル
- Arg2 = ループの
TRUE
/FALSE
- Arg6 = フェード秒
の引数を持ちます.
停止はStopVoice
です.
ChangeSoundVolume
も有効に機能します.
素材はResources>Sound>Voiceに置き,Soundシートに登録します.
Label,Type(Voiceとする),FileName(Voiceフォルダ以下の相対パス)は入力必須です.
ロジック
パラメータ
- ParamシートでLabel,Type(
Bool
・Int
などの型),Value(初期値)を入力. - シナリオシートにおけるコマンドは
Param
で,Arg1に増減するための計算式を入れて使う. - Textなどでは
<param="パラメータのラベル">
の形で使う.
キャラクターシートのConditionalとパラメータを組み合わせることで,状態によって外見の異なる立ち絵を呼べる.
分岐
選択肢を見せるシナリオの分岐点ではSelection
を使います.
引数は,
- Arg1 = ジャンプ先
- Arg2 = 条件式
- Arg3 = 選択時に実行する計算式
です.
ジャンプ先は,「*ジャンプ先」のようにアスタリスクを先頭につけて記述します.
Selection
の引数に加えてArg4 = オブジェクト名を与えることで,
シーンでクリックした画像によりシナリオを分岐させることができます.
この場合,コマンドはSelectionClick
です.
ジャンプ
選択肢ではなくフラグ等によりシナリオをスキップするため,Jump
を使用することができます.
引数はSelection
のはじめ2つの引数と同じで,
- Arg1 = ジャンプ先
- Arg2 = 条件式
です.
ジャンプの特別な場合として,ランダムにシナリオを選んで進めるための,JumpRandom
があります.
JumpRandom
は,Jump
の2つの引数に加えて
- Arg3 = 遷移確率用の整数値(未設定のものを1として何倍出やすいジャンプか).
という変数を持ち,JumpRandom
が並んだ複数行の中から1つのシナリオを選択して進みます.
なお,あまりよいラベルの付け方ではないと思いますが,ジャンプ先のラベルは半角数字から始めても大丈夫でした.
サブルーチンへのジャンプ
サブルーチンはEndScenerio
の外に書ける特殊なジャンプ先で,JumpSubroutine
によって入ることができます.
サブルーチンの終わりでは,EndSubroutine
しなければなりません.
同じサブルーチンを複数回呼ぶ時に便利です.
処理が終わったら,元の行の終了時点に戻ります.
別のところに戻すにはJumpSubroutine
で
- Arg3 = 終了時ジャンプ先
を与えてください.
JumpSubroutineRandom
はJumpRandom
と同じ要領で使うことができ,JumpSubroutine
の3つの引数に加えて
- Arg4 = 遷移確率用の整数値
を持ちます.
マクロ
マクロは,Macroシートに*マクロ名
からEndMacro
で囲うことで作成できます.
引数をとる場合,該当引数を代入したいセルに%Arg1
と書く.
すると,マクロで引数Arg1
をとることができます.
変数を設けなければ,入っている数値のまま動きます.
引数が入れられなかった場合のデフォルト値を設定しておくには,マクロ名を定義する行のArg1–Arg6に書けばOKです.
公式のマニュアルによれば,以下の特長があるとのことです.
- マクロ内で変数を
Param
コマンドの変数にとれます. - 剰余演算子の
%
と併用可能です. - 引数では固定的な数値をとってくるのだが,マクロ内(でのみ)
&entity_name
でパラメータentity_name
をとることにより数値や文字列,登場させるキャラクター名を動的に変化させることができます.
If文
宴公式では推奨こそされていないものの,条件分岐のためにIf文が用意されています.
If
,ElseIf
がArg1で与える条件に対して使え,それ以外のケースはElse
に送られます.
If文終了時にEndIf
を置くことが必要です.
UI
- 既読選択肢の表示色を変えるには,ヒエラルキーのAdvEngine>UI>Selectionに付けられたスクリプトのSelected Color ModeをChangeにします.
- メッセージウィンドウの強制表示と非表示はそれぞれ
dShow/HideMessageWindow
,メニューボタンではShow/HideMessageButton
です. GuiActive
でGUIをオン・オフします.引数はArg1 = GUIオブジェクト名(未入力なら全て),Arg2 =On
/Off
です.
UI変更
- Packing Tagはアトラス化するための名前です.
- 9-slicingするには,Sprite EditorからBorderを適当に設定した上で,UIオブジェクトのSpriteでImage TypeをSliceに設定します.
- UIのスプライトはImageコンポーネントのSource Imageから変更します.
- 同一のファイル名でUI画像の差し替えを行うなら,Unityの外で行います.
- セーブウィンドウなどにはプレハブが使われています.
その他
シナリオシートの分割
ツール>シナリオデータビルダーでエクセルリストにファイルを入れてインポートします.
順序があり,2章で1章のファイルは読めますが,その逆はできないので注意しましょう.
小説
クリックで読み進めるテキストとして宴を利用する場合,ヒエラルキー AdvEngine>UI>MessageWindowのRect Transformでメッセージボックスのサイズを大きくする.
バックログで文字が省略されないように,プロジェクトのPrefabs>UI>backLogItemでIs Multi Text In Pageにチェックを入れ,有効にします.
あとはエクセルファイルにシナリオを書きます.
通常のText列とPageCtrl列を使用し,PageCtrl列のコマンドは以下の通りです.
(なし)
改ページのクリックを待つInput
クリック後,次コマンドへInputBr
クリック後,改行して次コマンドへNext
入力待ちなく次コマンドへ
文字飾り
HTMLタグの要領で文字列を囲むことにより,装飾することができます.
- 太字:
<b>
と</b>
で囲む. - 斜体:
<i> </i>
- 下線:
<u> </u>
- ルビ:
<ruby = ふりがな> </ruby>
セリフに顔アイコンを出す
キャラクターシートのIcon
,IconSubFileName
を入れます.
グレーアウト
グレーアウトするには,Utage>Scripts>ADV>Extra>AdvCharacterGrayOutController.csをAdvEnginにAddComponentします.
Maskは以下の通りです.
None
にすると,グレーアウトしない.Talking
で喋っているキャラがグレーアウトしない.NewCharacerInPage
ページで加わったキャラはグレーアウトしない.NoChanageIfTextOnly
テキスト表示のみでも色変化しない.
Main/SubColorはグレーアウトしない/する場合の色を表します.
グレーアウトしないキャラはEnable Change Orderで話しているとき手前に出せます.
Order Offsetはそのオフセット値です.
ダイシング
画像処理軽減のため,差分のある部分だけ画像を差し替えるダイシングの方法です.
データを作成するには,まずTools>Utage>DicingConverterを開きます.
- Inputは対象画像群のフォルダです.
- Output1は.assetが作られるフォルダです.適当に用意できます.
- Output2はバラバラになった画像が吐き出されるフォルダです.適当に用意できます.
あとはビルドするだけです.
ビルドだと前回ビルドからの差分を見るそうなので,画像変更したりしたらリビルドする必要があります.
Characterシートでは以下のように設定します.
- FileNameはできたアセットまでの,Characterフォルダからの相対パスを入れます.
- SubFileNameは元の画像のテクスチャ名にします.Characterフォルダ内でfolder/picture.pngという位置に置いていたテクスチャであれば,
picture
になります.folderやpngは要りません. - FileTypeは
Dicing
です.
アニメーション
宴では目パチ(EyeBlinkシート),口パク(LipSynchシート),パラパラアニメ(Animationシート)が設定できます.
Live2D Cubism3を使用できます.