效果图:
Gamobject:
挂载脚步:
代码:
MessageBoxPanel .cs
public class MessageBoxPanel : MonoBehaviour
{
public Text lblNote;
public UIButton btnSubmit;
public UIButton btnYes;
public UIButton btnNo;
private MessageBoxEnum.OnReceiveMessageBoxResult callback;
protected delegate void ObjCallBack(GameObject obj);
protected delegate void BtnCallBack(UIButton obj);
protected void SetBtnClick(GameObject btnObj, ObjCallBack onClick)
{
Button btn = btnObj.GetComponent<Button>();
if (btn != null)
{
btn.onClick.AddListener(delegate ()
{
SoundEvent sound = BootStrap.GetInstance<BootStrap>().menuClickSound;
if (sound != null)
{
sound.play();
}
onClick(btnObj);
});
}
}
void Awake()
{
SetBtnClick(btnSubmit.gameObject, OnSubmitHandler);
SetBtnClick(btnYes.gameObject, OnSubmitHandler);
SetBtnClick(btnNo.gameObject, OnCancelHandler);
this.ResetButtons();
}
private void ResetButtons()
{
btnSubmit.gameObject.SetActive(false);
btnYes.gameObject.SetActive(false);
btnNo.gameObject.SetActive(false);
}
public void ShowMessageBox(string context, MessageBoxEnum.Style style, MessageBoxEnum.OnReceiveMessageBoxResult callback)
{
this.lblNote.text = context;
this.callback = callback;
this.ResetButtons();
if (style == MessageBoxEnum.Style.Ok)
{
this.btnSubmit.gameObject.SetActive(true);
}
else if (style == MessageBoxEnum.Style.OkAndCancel)
{
btnYes.gameObject.SetActive(true);
btnNo.gameObject.SetActive(true);
}
}
private void OnSubmitHandler(GameObject o)
{
gameObject.SetActive(false);
if (callback != null)
{
callback.Invoke(MessageBoxEnum.Result.Ok);
}
}
private void OnCancelHandler(GameObject o)
{
gameObject.SetActive(false);
if (callback != null)
{
callback.Invoke(MessageBoxEnum.Result.Cancel);
}
}
public void onEscCancle()
{
OnCancelHandler(btnNo.gameObject);
}
}
MessageBoxEnum.cs
public class MessageBoxEnum
{
public delegate void OnReceiveMessageBoxResult(MessageBoxEnum.Result result);
public enum Style
{
Ok,
OkAndCancel
}
public enum Result
{
Ok,
Cancel
}
}
测试代码:
public MessageBoxPanel messageBoxPanel;
public void Test()
{
if (messageBoxPanel != null)
{
messageBoxPanel.ShowMessageBox("提示框", MessageBoxEnum.Style.OkAndCancel, callback);
}
}
public void OnMessageBoxResult(MessageBoxEnum.Result result)
{
if (result == MessageBoxEnum.Result.Ok)
{
Debug.Log("OK");
}
}