栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity简单的对话框(Dialog)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity简单的对话框(Dialog)

1.对话框所有代码

可根据自己需要使用单例模式

public class DialogManager
{
    public static Dictionary DialogDic = new Dictionary();//储存所有对话框,可以根据自己需要进行管理
    private static Transform panelParent;//对话框根目录
    static DialogManager()
    {
        panelParent = GameObject.Find("Canvas").transform;
    }
    /// 
    /// 展示对话框
    /// 
    /// 对话框的类型(Prefab也要用这个类型命名)
    /// 对话框返回值的类型
    /// 回调
    public static void Show(System.Action> callback)
    {
        Show(null, callback);
    }
    /// 
    /// 展示对话框
    /// 
    /// 对话框的类型(Prefab也要用这个类型命名)
    /// 对话框返回值的类型
    /// 传参
    /// 回调
    public static void Show(object par, System.Action> callback)
    {
        string key = typeof(TDialog).Name;
        IDialog dialog;
        if (DialogDic.TryGetValue(key, out var dialogObj))//存在,获取
        {
            dialog = dialogObj as IDialog;
            dialog.OnStart(par);
        }
        else//不存在,新建
        {
            GameObject obj = Object.Instantiate(Resources.Load(key), panelParent);
            obj.name = key;
            dialog = obj.GetComponent>();
            DialogDic.Add(key, dialog);
            dialog.OnStart(par);

            dialog.CloseAction += res =>
            {
                dialog.OnExit();
                callback?.Invoke(res);
            };
        }
    }
}
/// 
/// 对话框接口,所有对话框都要继承此接口
/// 
/// 对话框返回值的类型
public interface IDialog
{
    System.Action> CloseAction { get; set; }
    void OnStart(object par = null);
    void OnExit();
}
/// 
/// 对话框返回类型(这里用作区分点击哪个按钮)
/// 
public enum DialogStatus
{
    OK, Cancel
}
/// 
/// 对话框返回值
/// 
/// 对话框返回值的类型
public class DialogResult
{
    public DialogStatus Status { get; set; }
    public TResult Result { get; set; }
}

2.创建一个测试的对话框
public class QuestionDialog : MonoBehaviour, IDialog
{
    public Action> CloseAction { get; set; }

    private Button OKButton, CancelButton;
    private InputField QuestionField;
    private void Awake()
    {
        OKButton = transform.Find("OKButton").GetComponent
3.调用创建的对话框
        DialogManager.Show("传参", res =>
        {
            if (res.Status == DialogStatus.OK)
                Debug.Log(res.Result);
            else
                Debug.Log("取消");
        });
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号