ダイアログウィンドウを作ってはみたものの・・・
ダイアログのスクリプトに、メッセージやボタンを押したときの処理を記述したら共用したときに、ややこしくなる未来しかみえません。だったら処理は呼び出し側で記述してしまいましょう
呼び出す側でテキストだけでなく、Yes/Noが押された時の処理も設定してしまおうということです。そこでUnityActionの出番
UnityActionは、処理を登録することができます。関数を登録しておくと、好きなタイミングで呼び出すことができる便利なものです。プロパティ例
public TMPro.TextMeshProUGUI messageText;UnityActionは、変数と同じように宣言すればオッケーです。
public UnityAction OkAction { get; set; }
public UnityAction NoAction { get; set; }
ボタンが押された時のコールバック例
public void OnClick()呼び出しは、
{
OkAction?.Invoke();
}
public void NoClick()
{
NoAction?.Invoke();
}
OkAction();
だけでも良いのですが、ここではnullの場合もあるので
OkAction?.Invoke();
としています。
これだと、nullのときに何もせずに処理は素通りしてくれるので安心です。
呼び出し用の関数例
/// <summary>この関数を使って呼び出してもらいます。
/// 設定
/// </summary>
/// <param name="message">メッセージテキスト</param>
/// <param name="okAction">OKアクション</param>
/// <param name="noAction">NOアクション</param>
public void Setup(string message, UnityAction okAction = null, UnityAction noAction = null)
{
messageText.SetText( message );
OkAction = okAction;
NoAction = noAction;
}
テキストとアクションを登録するだけですね。
呼び出し例
confirmPanel.Setup("チュートリアルをスキップしますか?", () => Debug.Log("はいが押されました"), () => Debug.Log("いいえが押されました"));こんな感じです。
もちろん、関数にすることもできます↓
confirmPanel.Setup("チュートリアルをスキップしますか?", OnYes);こんな感じです。
void OnYes()
{
Debug.Log("はいが押されました");
}
引数は使えないの?
宣言するときに指定することで引数が使えるようになります。public UnityActionOkAction(value);OkAction { get; set; }
みたいに使えますよ。
0 件のコメント :
コメントを投稿