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); });
    }
}

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

public class Test : MonoBehaviour {
    public Button saveButton;
    private void Start()
    {
        saveButton.onClick.AddListener(Save);
    }
    private void Save()
    {
        SingleMessageBox.MessageBox.DisplayMessageBox("确定要保存吗?",()=> { Debug.Log("保存成功"); }, ()=> { Debug.Log("取消保存"); });
    }
}

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

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

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

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款强大的3D游戏引擎,可以利用其提供的弹窗功能来展示3D物体。弹窗是Unity中的一种界面元素,是在画面中间或屏幕边缘出现的窗口。弹窗通常用于在游戏中向玩家显示重要信息、提供交互选项等。 在Unity中展示3D物体需要使用GameObject和Transform组件。首先,我们需要在场景中创建一个GameObject,然后将需要展示的3D物体作为其子对象进行添加。接着,我们需要给这个GameObject添加Canvas和Image组件,这样才能够在弹窗中显示出来。 然后,我们需要在代码中实现弹窗的逻辑。我们可以使用Unity提供的UI系统,如Button和Text组件,来创建弹窗中的选项和文字。在代码中,我们可以通过监听按钮的点击事件来控制弹窗的显示和隐藏。 最后,在弹窗的显示和隐藏逻辑中,我们需要使用GameObject和Transform组件中的SetActive()和localPosition属性来控制3D物体的显示位置和可见性。这样就可以实现利用弹窗展示3D物体的效果了。 总之,Unity的弹窗功能为我们展示3D物体提供了便捷的方式,同时也丰富了游戏的交互性和可玩性。 ### 回答2: Unity是一款功能强大的游戏引擎,它可以用来开发游戏、虚拟现实和增强现实应用等。Unity可以利用弹窗展示3D物体,这为用户提供了更好的交互体验。 弹窗是一种常用的用户界面元素,用户可以通过弹窗来查看和操作应用中的内容。在Unity中,可以通过编写脚本来实现弹窗展示3D物体的功能。首先,需要在场景中创建一个物体,这个物体可以在脚本中被引用。接着,需要编写一个UI控件来触发弹窗的展示,这可以是一个按钮或者一个菜单项等等。当用户点击这个UI控件时,脚本会调用弹窗来展示3D物体。展示3D物体时,通常需要设置摄像机的位置和角度,以确保用户可以看到物体的全部细节。 弹窗展示3D物体可以用于许多不同的应用场景,包括商品展示、虚拟现实游戏等。通过利用Unity的强大功能,开发人员可以快速创建出具有良好用户体验的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值