Param
ゲーム内で使用するパラメーターの設定。シナリオ分岐のためのフラグや、好感度などの数字、プレイヤー名などの文字列を設定する。
目次
サンプル
リファレンス
項目名 | 内容 | 空欄の扱い |
---|---|---|
Label | パラメーターのラベル | 入力必須 |
Type | パラメーターの型。用途によって以下のいずれかを記入する Int:整数 Float:少数 Bool:bool値(フラグ) String:文字列 |
入力必須 |
Value | パラメーターの初期値 | 入力必須 |
FileType | セーブされるファイルの種類。用途によって以下のいずれかを記入する Default:通常のセーブデータ System:システムセーブデータで扱う Const:初期値固定。Ver3以上必須 |
空欄の場合、Default |
FileType
FileTypeで、パラメーターをセーブの仕方を設定することができます。
FileType | 内容 |
---|---|
Default | 通常のセーブロードで使用。複数を切り替えて使うことができる。通常はこのセーブデータにパラメーターの状態もセーブされる |
System | ゲームが起動した直後に自動的にロードされ、各ページの状態やギャラリーモードの解放状態など、ゲーム全般で使用するセーブデータ。 パラメーターのFileTypeを"System"とすると、そのパラメーターはシステムセーブデータにセーブされ、ゲーム中であれば共通で使える値となる。 これは「クリア回数」などゲーム全般で使いたいパラメーターを作ることを想定している。 |
Const | 初期値固定タイプ。代入演算やセーブの対象にせず、常にエクセルのシートの値を固定で参照するようにします。 通常シート上の値は「初期値」なので、エクセルの初期値を変えてもセーブデータの値で上書きされてしまっていました。 バランス調整で参照する値などに不便だったため、宴3から追加しました |
Unityのプログラムから、宴のパラメーターを操作する
また、宴のシナリオ内で使用するパラメーターは
public AdvEngine engine; void SampleParameter() { //パラメーターの取得 var obj = engine.Param.GetParameter("パラメーター名"); //実際に使うときは型キャストする。ボクシングといってAlloc(メモリ確保)が発生してしまう。 float hoge = (float)engine.Param.GetParameter("hoge"); //型指定済みの取得を使えばキャストはいらない。 //宴3.9.8以降では内部でのボクシングも発生しない。 string str = engine.Param.GetParameterString("String型のパラメーター名"); bool flag = engine.Param.GetParameterBoolean("Bool型のパラメーター名"); int point = engine.Param.GetParameterInt("Int型のパラメーター名"); float f = engine.Param.GetParameterFloat("Float型のパラメーター名"); //パラメーターの設定 engine.Param.SetParameter("パラメーター名",hoge); //型指定済みの設定方法 engine.Param.SetParameterString("String型のパラメーター名","設定したい文字列"); engine.Param.SetParameterBoolean("Bool型のパラメーター名",true); engine.Param.SetParameterInt("Int型のパラメーター名",100); engine.Param.SetParameterFloat("Float型のパラメーター名",0.1f); }
などとして、スクリプト上から操作可能です。
会話シーンなどに宴を使う場合は、通常ゲーム部分で取得したポイントを宴のシナリオに反映させたり、逆に宴の選択肢などで変化したフラグを、通常ゲーム側で読み込むといったことも可能になります。
GetParameter系のボクシング対策
宴3.9.8までは、パラメーターの取得の際にボクシングが避けられませんでした。
ボクシング(ボックス化)はC#プログラム上の問題の一つで、値型と参照型をキャストする場合にAllocが発生してしまうというものです。
ほとんどのケースであまり問題になることはないのですが、毎フレーム呼び出す場面で使うとGCを頻繁に呼ぶことになって、ゲーム全体の処理落ちにつながる危険がわずかにあります。
これを避ける場合は、engine.Param.GetParameterBooleanなどのように、あらかじめ型を指定しているGetParameter系のメソッドを使用するにようにしてください。
タイトル画面などUI制御でパラメーターを呼び出す場合の注意
AdvEngineの初期化が終わっていないと、パラメータを呼び出してもエラーになってしまいます。
ほとんどのケースでは最初の1フレームで初期化されるのであまり問題ならないですが、ゲーム起動直後に動く部分で取得を行おうとするとエラーになる可能性があります。
パラメターが初期化されたかのチェックは、engine.Param.IsInitで可能です。
Updateなど、起動直後から呼び出す可能性がある処理で使う場合は、チェックをいれてください。
void Update() { if (!engine.Param.IsInit) return; var hoge = engine.Param.GetParameter("hoge"); }
また、テンプレートのUI構成の場合は、「IsWaitBoot」にチェックを入れることで起動画面で宴の起動待ちを行うようになります。
起動時は非アクティブなオブジェクトの場合は、こちらを使うほうが楽かもしれません。