当前位置:   article > 正文

Unity制作自定义消息提示框

unity制作自定义消息提示框

工作中使用软件经常会出现各种提示框?确定XXXXXX吗?选项一般是三个,是,否,取消。今天心血来潮,于是也尝试自己用unity制作一个简单的消息提示框。
准备工作:
首先需要搭建一个最简单的消息框界面。
在这里插入图片描述
然后开始编写编写一个单例模式类,专门用来管理各种消息提示框,代码如下:

public class SingleMessageBox : MonoBehaviour {
    public static GameObject UIMessageBox;
    private static SingleMessageBox messageBox;
    public static SingleMessageBox MessageBox
    {
        get
        {
            if (messageBox == null)
            {
                GameObject gameObject = new GameObject("SingleMessageBox");
                //获取需要管理消息框的游戏物体
                UIMessageBox = GameObject.Find("MessageBox");
                messageBox = gameObject.AddComponent<SingleMessageBox>();
                //Scene切换不会摧毁
                DontDestroyOnLoad(gameObject);
            }
            return messageBox;
        }
    }
    public void DisplayMessageBox(string content, Action OK, Action Cancel)
    {
        UIMessageBox.SetActive(true);
        //因为一开始是将界面隐藏在画布外,所以第一次调用只需要将位置调整回来即可。此处不可使用postion,那个是世界坐标。
        UIMessageBox.transform.localPosition = new Vector3(0, 0, 0);
        UIMessageBox.transform.GetChild(1).GetComponent<Text>().text = content;
        //使用前需要移除所有已绑定的事件,否则会执行多次。
        UIMessageBox.transform.GetChild(2).GetComponent<Button>().onClick.RemoveAllListeners();
        UIMessageBox.transform.GetChild(3).GetComponent<Button>().onClick.RemoveAllListeners();
        UIMessageBox.transform.GetChild(4).GetComponent<Button>().onClick.RemoveAllListeners();
        //给不同的按钮分别添加事件
        UIMessageBox.transform.GetChild(2).GetComponent<Button>().onClick.AddListener(() => { OK(); UIMessageBox.SetActive(false); });
        UIMessageBox.transform.GetChild(3).GetComponent<Button>().onClick.AddListener(() => { Cancel(); UIMessageBox.SetActive(false); });
        UIMessageBox.transform.GetChild(4).GetComponent<Button>().onClick.AddListener(() => { UIMessageBox.SetActive(false); });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

然后编写一个测试脚本,代码如下:

public class Test : MonoBehaviour {
    public Button saveButton;
    private void Start()
    {
        saveButton.onClick.AddListener(Save);
    }
    private void Save()
    {
        SingleMessageBox.MessageBox.DisplayMessageBox("确定要保存吗?",()=> { Debug.Log("保存成功"); }, ()=> { Debug.Log("取消保存"); });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

实战效果:
在这里插入图片描述

总结:实现方式有多种多样,我这里只是举了个最简单的例子。
先总结这个方法:首先制作一个消息界面,创建一个单例消息管理类管理它,这个类中有一个显示消息框的方法(通过setActive),参数有委托和string,传进来的委托负责每个按钮触发的事件,string负责修改提示文本。
注意点:初始化的时候通过Find的方法添加消息框,因为状态为false的游戏物体无法通过Find找到,所以一开始是将消息框放在了Canvas外,另外每次给按钮添加新的事件之前需要移除已有的事件,否则会多次执行(因为此处是控制setActive),如果是直接简单暴力的摧毁游戏物体,点击的时候再重新创建则不需要移除已有事件。
其他也能实现消息框的方法:
1、制作成预制体,为每个消息框单独的创建脚本,特定的时候调用特定的消息框,复用性较差。
2、在该博文方法中新增一个继承,即只创建一个最基础的消息框模板,具体如何实现,有几个按钮由子类继承的时候实现,工作中曾在FairyGUI的使用中见过。
3…

案例Demo
PS:这里是U3D程序狗一只,日常分享工作中遇到的问题与学习笔记。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/118373?site
推荐阅读
相关标签
  

闽ICP备14008679号