# カスタム変数

カスタム変数機能を使用すると、ユーザー指定の変数を作成し、naninovelスクリプトまたは他のシステムの条件付き実行を実行するのに使用できます。たとえばカスタム変数は、プレーヤーが過去に行った決定に基づいて、複数の中から特定のシナリオルートを選択するのに使えます。よく使用される他の例は、プレーヤーのゲーム内での行動に基づくプレーヤー統計画面(スコア、お金、リソースなど)です。

カスタム変数はnaninovelスクリプトで、 @setコマンドと @if コマンドで作成、変更、使用できます。また ICustomVariableManager エンジンサービス を使用した C# スクリプトでも可能です。

たとえば以下のスクリプトコマンドは、選択に基づいて、カスタム変数 score に異なる値を割り当てます:

@choice "I'm humble, one is enough..." set:score=1
@choice "Two, please." set:score=2
@choice "I'll take your entire stock!" set:score=999

次のコードは、score 変数の値に基づいてスクリプトの実行を再ルーティングします:

@goto MainRoute if:"score > 1 && score <= 900"
@goto BadEnd if:score>900

他の例は、APIリファレンスの @set@if コマンドを参照してください。

すべてのカスタム変数は自動的にゲームに保存されます。デフォルトでは変数は ローカルスコープ に保存されます。つまり、ゲームプレイ中に変数を割り当て、プレーヤーが新しいゲームを開始したり、その変数が割り当てられていない別の保存済みゲームスロットを読み込んだりすると、値は失われます。これはほとんどの変数に便利です。しかし、もし グローバルスコープ に変数を保存したい場合は、変数名に G_g_ を付与してください。例: G_FinishedMainRoute または g_total_score。グローバル変数を使用すると、メタ情報や合計情報を示すことができます。たとえば、プレーヤーがルートを終了した回数や、すべてのプレイに基づく合計スコアなどです。

コンフィグメニュー "Custom Variables" で、事前定義されたカスタム変数(グローバルとローカルの両方)に初期値を設定できます。

グローバルな事前定義変数は、最初のアプリケーションの起動時に初期化されますが、ローカル事前定義変数はステートがリセットされるたびに初期化されます。メニューの値フィールドには、raw値文字列ではなく、有効なスクリプト式が必要であることに注意してください。

# 変数の挿入

中括弧を使用して、naninovelスクリプトのパラメーター値にカスタム変数を挿入(インライン化)することができます。

次のスクリプトは、ユーザーが任意のテキストを入力できる入力フィールドUIを示しています。送信すると、入力したテキストが指定したカスタム変数に割り当てられます。

; ユーザーに任意のテキストを入力させ、それをカスタムステート変数 `name` に割り当てます。
@input name summary:"Choose your name."
; ユーザーが入力を送信するまでスクリプトの実行を停止させるため、停止コマンドが必要です
@stop

; これで割り当てられた `name` 変数をnaninovelスクリプトに挿入できます。
Archibald: Greetings, {name}!
{name}: Yo!

; または、setや条件式の中で使用することもできます。
@set score=score+1 if:name=="Felix"

使用可能なタイプであれば、カスタム変数を任意のパラメーター値に挿入できます。文字列(テキスト)を整数(数値)パラメータに割り当てることはできません。

@set PlayerName="Felix";PlayerYPosition=0.1;PlayerTint="lightblue"

; 以下はエラーになります。`PlayerTint` は数値ではないためです。
@char {PlayerName} pos:50,{PlayerTint}

; ...こちらは問題なく動作するでしょう。
@char {PlayerName} pos:50,{PlayerYPosition} tint:{PlayerTint}

# 変数トリガー

カスタムUI や他のシステムを構築する場合、変数の値が変更されたときにイベントを発生(反応)したい場合があります。たとえば、キャラクターの統計画面を作成するとき、変数によってテキストを変更するなどです。このような動作を実装する従来の方法は C# スクリプトを使用することですが、 Custom Variable Trigger コンポーネントを利用することもできます。指定された名前の変数が変更されると、コンポーネントはUnityイベントを呼び出します。テキスト値の更新など、互換性のあるコマンドをこれらのイベントにバインドできます。

# 変数のデバッグ

ゲームの実行中にすべての既存の変数を表示し、値を変更してデバッグが可能です。

開発コンソール を開いて var コマンドを入力し、変数編集ウィンドウを開きます。

リスト内の変数の値を変更すると "SET" ボタンが表示され、クリックすると変更を適用できます。

変数リストは、ゲームの実行中にカスタム変数が変更されると自動的に更新されます。

最終更新 日: August 5, 2020