カテゴリー: NaniNovel

  • 【Unity】Naninovel:様々なメッセージの表示パターン例

    【Unity】Naninovel:様々なメッセージの表示パターン例

    Naninovel には強力な print コマンドが存在していて、メッセージを表示するだけでも様々な表示方法があります。

    動作確認バージョン

    • Unity 2019.2.10f1
    • Naninovel 1.8.2

    print コマンドのオプション

    reset文章をリセットするか?初期値は true でメッセージはクリアされる。
    false にすることで続けてメッセージを表示できる。
    waitInputユーザー入力を受け付けるまで待機するか?初期値は true で待機する。
    false にすると次のコマンドへ自動的に進む。

    表示例

    1行メッセージ表示するだけ

    @print こんにちは!

    複数行メッセージを同時に表示

    @print 1行目 waitInput:false
    @br 
    @print 2行目 reset:false waitInput:true

    2行目まで表示された後、ユーザー入力を待ちます。

    複数行 メッセージを同時に表示した後、ユーザー入力を受け付けてから次のメッセージを表示する

    @print あああああ waitInput:false
    @br 
    @print いいいいい reset:false waitInput:false
    @br 
    @print ううううう reset:false waitInput:true
    @br 2
    
    @print えええええ reset:false waitInput:false
    @br
    @print おおおおお reset:false waitInput:true

    “ううううう”まで表示された後、ユーザー入力があれば残りの2行を表示します。

    番外編:print コマンドを使わないメッセージの表示

    @ から始まるコマンドを使わずともメッセージは表示できます。

    キミと初めて出会ったあの日、わたしの願いは叶ったんだ。

    ただ文章を書くだけで、1行メッセージとして認識されます。

    おなかが、すいた……
    たべても、たべても、たりない。

    これだと、1行目が表示された後、ユーザー入力を待って2行目が表示されます。

    おなかが、すいた……[br]たべても、たべても、たりない。

    インラインコマンド [br] を使うことで、改行コード扱いとなり、一度に2行分表示できます。

    まとめ

    組み合わせ次第で表現の幅が広がりますし 色々試してみるのも面白いですね。

  • 【Unity】「宴」だけじゃない!テキストベースのビジュアルノベルアセット「Naninovel」について語ります

    【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とは長い付き合いになりそうです。

  • 【Unity】Naninovel:TIPSを解放する

    【Unity】Naninovel:TIPSを解放する

    Naninovelには単語帳の様なTIPS処理が標準で備わっています。

    Unlockable Items | Naninovel

    TIPSテキストの作成

    Resources/TextにTips.naniファイルを作成します。

    ;アンロックID,タイトル,カテゴリー,説明文の順番で「|」で区切る
    001: 桃太郎とは? | 登場人物 | 日本の代表的昔話の主人公。その、桃から生まれ、犬・猿・雉(きじ)を連れて鬼が島を征伐したという話。

    TIPSのアンロック

    unlockコマンドでアンロックできます。

    @unlock Tips/001

    実行結果

    アンロックコマンドを実行すると、初期状態では????となっているタイトルが解放され、カテゴリーや説明文を読むことが出来る様になります。

  • 【Unity】Naninovel:チャプターのアンロックメニューを作る

    【Unity】Naninovel:チャプターのアンロックメニューを作る

    1章を読み終えたら2章が解放される様な、段階的に選択肢が増えるメニューを作成します。

    アンロック用の選択肢を作成する

    カスタマイズメニューの作り方はこちらを参考に作成します。

    作成できたら、選択肢PrefabにUnlockable Trigger コンポーネントを追加します。

    Unlocked Item IdアンロックID。ここで指定したIDでチャプターをアンロックします。
    On Unlocked State Changedlock,unlockの状態更新されると呼ばれます。ここでGameObject.SetActiveしておくことで表示のON/OFFを実現します。

    設定ファイルにアンロックする選択肢を登録する

    メニューバーの[Naninovel]->[Resources]->[Unlockables]を選択します。

    NameにはUnlocked Item Idと同じ名前を設定しておいて、Objectには選択肢を登録します。これで準備できました。

    この状態で実行すると選択肢が出ません。ロックがかかっているためです。

    スクリプトを書く

    ;1章だけは最初から解放
    @unlock chapter01
    
    @choice 1章 handler:ButtonList button:ChoiceHandlers/CustomButtonChapter01 goto:chapter01
    @choice 2章 handler:ButtonList button:ChoiceHandlers/CustomButtonChapter02 goto:chapter02
    @choice 3章 handler:ButtonList button:ChoiceHandlers/CustomButtonChapter03 goto:chapter03
    @choice 4章 handler:ButtonList button:ChoiceHandlers/CustomButtonChapter04 goto:chapter04
    @choice 5章 handler:ButtonList button:ChoiceHandlers/CustomButtonChapter05 goto:chapter05
    
    @stop
    

    スクリプトを実行すると、1章だけ表示されます。

    unlockコマンドで2章を解放してみます。

    ;2章解放!
    @unlock chapter02

    これで2章が解放されます。

  • 【Unity】Naninovel:選択肢の見た目をカスタマイズする

    【Unity】Naninovel:選択肢の見た目をカスタマイズする

    通常、Naninovelで選択肢を表示するためにはchoiceコマンドを使います。

    @choice リンゴ
    @choice バナナ
    @choice パイナップル

    デフォルトではこの様なビジュアルです。今回はこの見た目をカスタマイズしてみます。

    画像付きの選択肢を作る

    選択肢をカスタマイズするには、デフォルトの選択肢Prefabをコピー・変更して作ると楽です。

    Prefabの複製

    NaninovelにChoiceHandlerButtonプレハブがあります。これを複製して、Assets/Resources/ChoiceHandlersフォルダにコピーします。フォルダが無ければ作成してください。コピーしたPrefab名は「CustomButton」とします。

    CustomButtonプレハブの編集

    CustomButtonを開き、中のTextコンポーネントを削除し、ButtonコンポーネントのImageスプライトを任意のものに変更します。

    可愛いカエルさんにしてみました。

    スクリプトの記述

    @choice カエルさん handler:ButtonList button:ChoiceHandlers/CustomButton
    @choice 2匹目 handler:ButtonList button:ChoiceHandlers/CustomButton
    @choice 3匹目 handler:ButtonList button:ChoiceHandlers/CustomButton

    handler:ButtonList はボタンリストとして選択肢を表示したい時に使います。button:でボタンPrefabを指定します、

    3匹のカエル

    選択肢を好きな座標に表示したい

    そんな時はButtonListをやめて、ButtonAreaを使います。こちらは自動で縦に並ばないので、posで座標を指定します。

    @choice カエルさん handler:ButtonArea button:ChoiceHandlers/CustomButton pos:0,0
    @choice 2匹目 handler:ButtonArea button:ChoiceHandlers/CustomButton pos:200,200
    @choice 3匹目 handler:ButtonArea button:ChoiceHandlers/CustomButton pos:0,400

    好みの位置に配置することが出来ます。通常の選択肢以外にも、マップ選択の様な用途にも使えそうです。