プログラム制御をしないで既存のシナリオコマンドのみで行うなら、
SelectionコマンドのArg2が表示条件式になるので、それでオンオフの場合両方のSelectionコマンドを書いて表示プレハブを分ける形になります。
ただ、それだと全ての該当箇所をそのようなシナリオを書かないといけないので、プログラムを使えばもっと簡易的に行えます。
選択肢プレハブにコンポーネントを追加することで、動作をカスタムできます。
Utage/Sample/Scripts/SampleCustomSelection.cs にサンプルがありますが、これはもっと大掛かりなので
画像を差し替えるだけなら下記のようなコンポーネントを書いてください
using UnityEngine;
using UnityEngine.UI;
using Utage;
using UtageExtensions;
namespace Sample
{
/// 選択肢用のカスタム処理をするサンプル
/// 選択肢プレハブに設定する
/// ・カスタム処理(指定したセル名の判定式(Bool型のParamなど)の結果によって、ボタンの画像を差し替える)
public class Sample: MonoBehaviour
{
//画像を差し替える対象のImage(選択肢ボタンの背景などを指定)
[SerializeField] Image targetImage;
//Boolのパラメーター名(条件式の判定に使用するパラメーターを指定)
[SerializeField] string paramName = "";
//条件式がtrueのときに設定する画像
[SerializeField] Sprite spriteOnTrue;
//条件式がfalseのときに設定する画像
[SerializeField] Sprite spriteOnFalse;
//AdvEngineを取得
AdvEngine Engine => this.GetAdvEngineCacheFindIfMissing(ref advEngine);
AdvEngine advEngine;
//最初の1フレーム時の初期化
void Start()
{
if (targetImage == null)
{
Debug.LogWarning("targetImage is not set", this);
return;
}
//カスタム処理
InitCustomOperation();
}
//カスタム処理(指定したセル名の判定式の結果によってボタン画像を差し替える)
void InitCustomOperation()
{
if (string.IsNullOrEmpty(paramName)) return;
var flag = Engine.Param.GetParameterBoolean(paramName);
//結果によって画像を差し替える
targetImage.sprite = flag ? spriteOnTrue : spriteOnFalse;
}
}
}
・上記のようなコンポーネントを作る
・選択肢プレハブにAddComponent
・コンポーネントの各値(対象のImage、パラメーター名、画像)を設定
選択肢ごとにプレハブを変えるのはこちらで行ってください。
上記のサンプルは、paramName をコンポーネントに設定する必要がある(つまりプレハブごとに固有の名前になる)ので
シナリオ上のSelectionコマンドの記述にパラメーター名を指定したい場合などは、
Utage/Sample/Scripts/SampleCustomSelection.cs のほうを参考にしてください。
//選択肢のデータを取得
var data = Selection.Data;
//Selectionコマンドの行データ
var rowData = data.RowData;
サンプルのこの部分のrowData でSelectionコマンドの1行のデータが取得できるので
その後の処理では、行内の指定セルの内容を取得して、そこに記述されたパラメーターを取得したり、記述された条件式の結果を判定したりするといったことをしています。
2026年4月13日月曜日 14:47:31 UTC+9 桃山マサル: