Unity3D工具类 - 模态提示框

本文介绍了一个用于Unity游戏开发的消息框组件实现方案。该组件包括一个消息框面板类MessageBoxPanel,支持不同样式的对话框显示,并通过委托回调来处理用户交互结果。文中还提供了测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图:
这里写图片描述

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");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值