>現在再生中のラベルに応じて
>ジャンプ先のラベルを変更することは可能でしょうか?
アプローチの仕方としては、2種類あります。
1.パラメーターを使って、ジャンプ先のシナリオラベルを変更する
- Paramシートに、ジャンプ先のラベル名として使用するString型のパラメーターを追加(仮にJumpLabelとします)
- A→B→Cのシナリオが開始したときに、Paramコマンドを使ってパラメーター(JumpLabel)の内容を、ジャンプしたいシナリオラベル名に変更
- ジャンプシナリオを呼び出すプログラムで、GetParameterString("JumpLabel")を使ってJumpLabelの内容を取得して、それをジャンプ先にする
- 例)
- var jumpLabel = engine.Param.GetParameterString("JumpLabel");
- JumpScenario(jumpLabel);
この方法であれば、プログラムやUnity上の値を変更することなく、シナリオを書く側でジャンプ先を調整可能です。
ただし、シナリオ上でジャンプ先のシナリオラベルの変更を忘れるてしまうというミスが起きがちかもしれません。
参考
2.プログラム上で現在のシナリオラベルに応じて、ジャンプ先のシナリオラベルを変える
AdvEngine Engine => this.GetAdvEngineCacheFindIfMissing( ref engine );
[SerializeField] AdvEngine engine;
AdvScenarioThread MainThread => Engine.ScenarioPlayer.MainThread;
void Sample()
{
//現在のシナリオラベルを取得
var currentScenarioLabel = MainThread.CurrentLabelData.ScenarioLabel;
//シナリオラベルによって、ジャンプ先のラベル名を変更するプログラムを書く(省略
}
元のシナリオラベルの命名規則に従ってジャンプ先を変えたり、ジャンプ先をランダムに変えたり、他のパラメーターに連動して細かく変更したい場合、
プログラムでそれに応じた細かい処理を書けるので、こちらの方が実装しやすいと思います。
ただ、プログラムを変更しないと制御しづらくなってしまうので、その点で問題が出てくるかもしれません。
その場合は、インスペクターなどで、今のシナリラベルとジャンプ先のシナリオラベルの対応データや、必要な変数(ランダムの重みづけなど)を追加設定可能な形で実装すれば、Unity上のインスペクターの値を変えるだけで済むようにもなります。
1の方向で実装するほうが楽だと思いますが、それでは実装できない複雑さが必要なのであれば2の方向を試してみてください。
2025年7月1日火曜日 23:58:56 UTC+9 ニコ: