選択肢
この機能により、プレイヤーにいくつかの選択肢を提示し、選ばれた選択肢に応じてスクリプトの実行先を切り替えることができます。
@choice コマンドの後に選択肢の概要とオプションの goto パスを続けて、シナリオスクリプトから選択肢を追加します。
; テキストを表示し、すぐに選択肢を表示します。
このスクリプトの実行を続けますか、それとも別のスクリプトをロードしますか?[>]
@choice "次の行から続ける"
@choice "指定したラベルから続ける" goto:#LabelName
@choice "別のスクリプトを最初からロードする" goto:AnotherScript
@choice "別のスクリプトをラベルからロードする" goto:AnotherScript#LabelNamegoto パラメーターが指定されていない場合、現在のスクリプトは次の行から実行を続けます。
選択肢ハンドラーアクターは、@choice コマンドを処理します。Naninovel -> Resources -> Choice Handlers エディターメニューで選択肢ハンドラーマネージャーを開くと、選択肢ハンドラーを追加、編集、削除できます。
選択肢ハンドラーの動作は、Naninovel -> Configuration -> Choice Handlers エディターメニューを使用して構成できます。利用可能なオプションについては、構成ガイド を参照してください。
選択肢ハンドラーの概要については、次のビデオチュートリアルを確認してください。
ネストされたコールバック
選択肢を選択した結果として実行する内容が少ない場合(たとえば、数文を表示するだけの場合)、わざわざラベルを用意して goto または gosub パラメーターを使用するのは実用的ではありません。代わりに、選択肢が選択されたときに実行するコマンドを ネスト します。
@choice "色について尋ねる"
Kohaku: 好きな色は何?
Yuko: マゼンタ。
@choice "年齢について尋ねる"
Kohaku: 何歳?
@shake Yuko
Yuko: なんで?
@choice "黙っている"
Kohaku: ...
気まずい沈黙が流れた。何階層でもネストできます。
@choice "年齢について尋ねる"
Kohaku: 何歳?
@shake Yuko
Yuko: なんで?
@choice "食い下がる"
Kohaku: 聞いただけだよ。秘密なの?
Yuko.Angry: そうよ!
@choice "あきらめる"
Kohaku: 気にしないで、忘れて。
@char Yuko.Relieved
@choice "黙っている"
...注意
ネストされた選択肢コールバックは、goto、gosub、set パラメーターと併用できません。これらをパラメーターとして指定する代わりに、ネストされたブロック内で適切なコマンドを使用してください:goto パラメーターの代わりに @goto、set パラメーターの代わりに @set など。
選択肢ボタン
@choice コマンドには、選択肢オブジェクトを表すカスタムプレハブへのパス(「Resources」フォルダーからの相対パス)を指定するオプションの button パラメーターがあります。
@choice handler:ButtonArea button:Home pos:-300,-300 goto:#HomeScene— ここでは、位置指定をサポートする選択肢ハンドラーを使用して、即席のマップ上のスポットを表しています。button パラメーターは、画像を包むボタンで構成されるプレハブを指します。プレハブは Assets/Resources/Naninovel/ChoiceButtons/Home.prefab に保存されています。
テンプレートから選択肢ボタンプレハブを作成するには、Create -> Naninovel -> Choice Handler -> Choice Button -> Choice Button アセットコンテキストメニューを使用します。
選択肢ボタンプレハブを「Resources」フォルダーに保存したくない場合や、ローカライズする必要がある場合は、選択肢ハンドラー構成メニューでカスタムローダーを設定し、利用可能な リソースプロバイダー のいずれかを使用してください。
@choice コマンドの button パラメーターが指定されていない場合、デフォルトのボタンプレハブが使用されます。
デフォルトで使用される選択肢ボタンを変更するには、カスタム選択肢ハンドラー を作成し、Choice Handler Panel コンポーネントの Default Button Prefab プロパティにプレハブを割り当てるか、カスタムコンポーネントを使用します。
選択肢テキストに別のテキストコンポーネントを使用するには、選択肢ボタンコンポーネントの On Summary Text Changed Unityイベント を使用します。
ロックされた選択肢
選択肢のよくある使用例として、条件に応じて特定の選択肢をロック/無効にするなどして、プレイヤーが選べないようにすることが挙げられます。たとえば、その選択肢より前に条件が満たされていない場合、特定のストーリー分岐にプレイヤーが進めないようにしたいことがあります。
これは(前述の)選択肢ボタンパラメーターでも実装できますが、よくある使用例であるため、Naninovelには @choice コマンドの lock パラメーターという専用の方法が用意されています。
; 「score」変数が10未満の場合、選択肢を無効/ロックします。
@choice "秘密の選択肢" lock:score<10組み込みの選択肢ボタンには、選択肢が追加されるたびに呼び出される On Lock イベントがあります。これにより、基になるボタンの Interactable プロパティが設定され、選択肢がロックされていない場合は操作可能に、ロックされている場合は操作不可になります。On Lock イベントにカスタムハンドラーをアタッチするか、選択肢ボタンクラスの HandleLockChanged メソッドをオーバーライドすることで、動作をオーバーライドまたは拡張できます。
ButtonList選択肢ハンドラー
ButtonListハンドラーはデフォルトで使用されます。選択肢ボタンを垂直レイアウトパネル内に配置し、@choice コマンドの pos パラメーターを無視します。
ButtonArea選択肢ハンドラー
ButtonListとは対照的に、ButtonAreaは特定のレイアウトを強制せず、追加された選択肢ボタンの位置を pos パラメーターで手動設定できます。たとえば、選択肢コマンドとButtonAreaハンドラーを使用してインタラクティブマップを作成する1つの方法は次のとおりです。
# Map
@back Map
@hidePrinter
@choice handler:ButtonArea button:MapButtons/Home pos:-300,-300 goto:#HomeScene
@choice handler:ButtonArea button:MapButtons/Shop pos:300,200 goto:#ShopScene
# HomeScene
@back Home
やっぱり我が家が一番!
@goto #Map
# ShopScene
@back Shop
キュウリを忘れないで!
@goto #MapChatReply選択肢ハンドラー
Chatプリンター で返信の選択肢を表すために使用されます。例:
@printer Chat
Kohaku: 今どこにいるの?
@choice "とぼける" handler:ChatReply
Yuko: ¯\_(ツ)_/¯
@choice "答える" handler:ChatReply
Yuko: 学校。文化祭の準備中カスタム選択肢ハンドラーの追加
組み込みテンプレートに基づいてカスタム選択肢ハンドラーを追加したり、ゼロから新しいハンドラーを作成したりできます。たとえば、組み込みの ButtonArea テンプレートをカスタマイズしてみましょう。
Create -> Naninovel -> Choice Handler -> Button Area アセットコンテキストメニューを使用して、Naninovelパッケージの外部(例:Assets/ChoiceHandlers フォルダー)にButtonAreaハンドラープレハブを作成します。
ハンドラーを編集します:フォント、テクスチャの変更、アニメーションの追加など。利用可能なUI構築ツールの詳細については、Unityドキュメント を確認してください。
Naninovel -> Resources -> Choice Handlers エディターメニューからアクセスできる選択肢ハンドラーマネージャーGUIを使用して、ハンドラーをエンジンリソースに公開します。+(プラス)ボタンを使用して新しいレコードを追加し、アクターID(プレハブ名と異なっていてもかまいません)を入力し、レコードをダブルクリックしてアクター設定を開きます。ハンドラープレハブを Resource フィールドにドラッグアンドドロップします。
これで、@choice コマンドの handler パラメーターでIDを指定することで、新しい選択肢ハンドラーを使用できます。
@choice "選択肢の概要テキスト。" handler:MyNewHandler例
UIサンプル で、パーティクルシステムを使用してカスタム選択肢ハンドラーを作成する例を確認できます。
IChoiceHandlerActor インターフェースを手動で実装して、ゼロから選択肢ハンドラーを作成することも可能です。詳細については、カスタムアクターの実装 に関するガイドを参照してください。