【Unity】「宴」だけじゃない!テキストベースのビジュアルノベルアセット「Naninovel」について語ります
この投稿はUnity アセット真夏のアドベントカレンダー 2019 Summer! – Unity公式 Asset Portalに合わせたタイミングで発信しています。
目次
ビジュアルノベルを作ろう
皆さんはビジュアルノベルゲームを作っていますか?日本だとADVって呼ばれることの多いジャンル。私は好きです!そんな好きなビジュアルノベルゲームを作るためのアセットがUnityにはあります。今回はそのなかでも比較的新しい「Naninovel」の話をしてみようとおもいます。
「宴」 は最も有名なノベルアセット
これは真実。長期間メンテナンスもされており、安定している所があります。作者様も日本人なので日本語資料が豊富です。企業の採用実績もあって、何か問題があれば検索すると大抵の問題は解決します。スクリプト形式はエクセルでの入力を採用し、非エンジニアでも問題なく使用できる環境が整っています。素晴らしい。これはこれで好きです。
しかし私はテキストベースで入力したい
宴は便利で素晴らしいアセットです。しかし、エンジニアである私はテキストベースでコマンドを入力したい。1から作ってしまっても良いけれど、何かそうしたアセットは無いものかとアセットストアの海をさ迷っていた・・・。
突如彗星の如く現れた「Naninovel」
2019年になって新たなビジュアルノベルアセットが配信されました。Naninovelです。動作デモを見て「良さそう!」と感じ、1時間後には購入していました。少し惚れている。
実はまだベータ版
バージョン1.7.0betaということで、現在はベータ版として配信されています。今後仕様が大きく変更される可能性はある、という点だけは留意しておいた方が良いですね。個人的にはベータ版なのにこんなに機能満載!でハッピーな気持ちになります。
動作デモ
WebGL版での動作デモがあります。クール!
https://naninovel.com/demo/
Naninovelの特徴
私が素敵だなーと思った点をいくつか述べさせて頂きます。
テキストベースのスクリプト
独自の拡張子を持つ*.naniファイルにスクリプトを書いていくのですが、テキストエディター慣れしているとストレスフリーで物語が書けます。
メッセージの表示
むかし、むかし、あるところに、おじいさんとおばあさんがありました。
まいにち、おじいさんは山へしば刈《か》りに、おばあさんは川へ洗濯《せんたく》に行きました。
ある日、おばあさんが、川のそばで、せっせと洗濯《せんたく》をしていますと、川上《かわかみ》から、大きな桃《もも》が一つ、
桃: 「ドンブラコッコ、スッコッコ。ドンブラコッコ、スッコッコ。」
コマンド指定はせず素直に文章を書けば良い。改行を入れるとメッセージは区切られる。名前を付与しておくと、名前付きでテキストを流せる。
コメント追加
;コメントだよ!
セミコロンから先はコメント扱いになる。
キャラクターの表示
;デフォルト
@char Bear.Default
;笑顔
@char Bear.Smile
表情差分にも対応できます。
キャラクターの非表示
@hide Bear
@charで表示したキャラクターを非表示にできる。
背景の表示
@back リソース名
mp4など動画ファイルをを背景リソースとして登録しておけば、背景に動画を流すことも出来ます。
分岐
choiceで選択肢を表示、gotoで飛べる
@choice リンゴ goto:.apple
@choice バナナ goto:.banana
@stop
# apple
リンゴが選択されたよ!
@goto .end
# banana
バナナが選択されたよ!
@goto .end
# end
分岐終了!
@choice を書いた分だけ、選択肢が増える。@stopで停止しておかないと勝手に先に進むので注意しよう。
別のスクリプトを呼び出す
@choice スクリプト変更! goto:sub
@choice そのまま突き進め! goto:.no_change
@stop
# no_change
スクリプトは変更されませんでした!
スクリプトが変更されたよ!
@stop
名前入力
@input name summary:"あなたの名前は?"
@stop
桃: 素晴らしいよ, {name}!
{name}: いえーい!
入力した後、そのスクリプト内で変数として扱える。
BGMの再生
@bgm volume:0.5 loop:true time:2.5
時間指定やループ指定が出来ます。
効果音の再生
@sfx volume:0.75 loop:false time:2.5
BGMと同様に設定できます。
メッセージウインドウの変更
ダイアログ形式や、かまいたちの夜の様な全画面方式に変更できます。
; ダイアログウインドウへ切り替え
@printer Dialogue
; 全画面ウインドウへ切り替え
@printer Fullscreen
ほかにもチャットウインドウの様なものや、ワイド表示するウインドウが同梱されています。これらは自由に追加できます。
ウエイトをはさむ
; 待機
@wait 0.5
条件式
if文、書けます。
@set value=Random(0,100)
@if value>50
大きいね
@else
小さいね
@endif
クイックセーブ
@save
たったこれだけで好きなタイミングで保存できます。シンプル!
基本的なコマンドを網羅してみました。より詳しく知りたい人は https://naninovel.com/api/ を除いてみてください。実に沢山あります!
ダイシング対応
キャラクターの表情などは、差分が少ない(顔の一部だけ違う等)けど似たようなテクスチャが沢山あります。これはアプリサイズを肥大化させてしまう原因のひとつです。これに対応するためNaninovelでは、ダイシングという元テクスチャを賽の目に細かく切って、必要なものを繋げて1枚の絵にする技術が採用されています。宴にも採用されています。ダイシングの設定方法は 【Unity】NaniNovel:「SpriteDicing」をつかってキャラクターの容量を削減するを参照してみてください。簡単に設定できます。
既存ゲームのシステムの一部として利用できる
もちろん、既に開発中のゲームにウインドウシステムとして導入することもできます。 ※【Unity】NaniNovelの会話システムのみを利用する
Google Driveと同期 し共同作業ができる
アセット作者様の拡張プラグインUnityGoogleDriveを取り込めばGoogle ドライブにnaniスクリプトファイルを置いて複数人で同一のスクリプトを編集できる様になります。書き方をレクチャーする時に、ファイルの受け渡しが発生せず実にクールです!
Google Drive Integration | Naninovel
まとめ
Naninovelはテキストベースでのスクリプトだったりしていて、シナリオライターさんだったり書く人への配慮が行き届いていると感じています。ストレスのある環境は開発効率も落ちますし、モチベーション維持も大変です。
私は現在、Naninovelを使ってビジュアルノベルを開発中です。 実際にシナリオライターさんにテキストベースでの入力を提案したところ「これが欲しかった!」と言って頂けて、幸先の良いスタートになりました。本当に買ってよかった。これからNaninovelとは長い付き合いになりそうです。