unity中创建询问弹出窗口

2023-11-20

在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作,今天就来制作一个这样弹出窗口,然后根据弹出窗口的选择内容不同进行不同的操作。本例中主要是为了删除一个数据,而在删除数据操作前需要得到用户的一个确认操作。这是需要创建的对象基本上就是两个按钮也就是一个确认一个取消按钮,再就是消息内容即两个text对象
这里面主要用到了NotificationCenter插件内容来进行消息传递,经过尝试发现消息传递的方式传递效率远高于携程方式。具体先看这窗口消息代码:

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public struct Ask  
{
    public string sign;
    public bool ASKBL;
}
public class AskWindow : MonoBehaviour
{
    // Start is called before the first frame update
    public TextMeshProUGUI Teile;
    public TextMeshProUGUI MSGDATA;
    public Button OK;
    public Button cancel;
     
     public Ask ask;
    void Start()
    {
        ask = new Ask();
        ask.ASKBL = false;
        OK.onClick.AddListener(OnOK);
        cancel.onClick.AddListener(Oncancel);
    }
    void Oncancel()
    {
        ask.ASKBL = false;
        gameObject.SetActive(false);
        NotificationCenter.DefaultCenter().PostNotification(this, "GetWindowsMSG", ask);
    }
    void OnOK()
    {
        ask.ASKBL = true;
        gameObject.SetActive(false);
        NotificationCenter.DefaultCenter().PostNotification(this, "GetWindowsMSG", ask);
    }
    // Update is called once per frame
    void Update()
    {
        
    }
}

如上每个按钮中都增加了一个消息发送内容,在这里定义了一个结构Ask 的结构,用来记录窗口的内容以及传入的消息区分方式。
然后回到处理的代码中增加如下内容:

void GetWindowsMSG(Notification note)  //建立处理消息
    {
        Ask st = (Ask)note.data;  获取传递过来的消息
       
        if (st.sign== "Dtable"&&st.ASKBL)
        {
            ...............
        }
        if (st.sign == "DELtablelie" && st.ASKBL)
        {
            ....................
        }
    }

以及消息声明

NotificationCenter.DefaultCenter().AddObserver(this, "GetWindowsMSG");   //建立消息监听

这些都处理好了我们要做就是显示窗口就可能,如下所示。

/// <summary>
    /// 显示循环消息完毕后通过ASKBL的状态判断选取对象
    /// </summary>
    /// <param name="tile"></param>
    /// <param name="MSG"></param>
    static public void ShowASK(string tile, string MSG,string sign)
    {
        GameObject root = GameObject.Find("Windows");
        GameObject go = root.transform.Find("ASKWindows").gameObject;
        go.SetActive(true);
        go.GetComponent<AskWindow>().Teile.text = tile;
        go.GetComponent<AskWindow>().MSGDATA.text = MSG;
        go.GetComponent<AskWindow>().ask.sign = sign;


    }

最后效果见图所示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity中创建询问弹出窗口 的相关文章

  • MSI 和 EXE 安装程序有什么区别,我应该选择哪一个? [复制]

    这个问题在这里已经有答案了 可能的重复 msi 和 setup exe 文件之间有什么具体区别 https stackoverflow com questions 1789530 what are the specific differen
  • 如何从该 Voronoi 图数据中获取单元格字典?

    使用找到的voronoi delaunay图生成库在这个节目中 http sourceforge net projects mapmanager 这是基于 财富 最初的实施他的算法 http en wikipedia org wiki Fo
  • 删除字符串 C 的第一个字符

    我试图删除字符串的第一个字符并保留其余部分 我当前的代码无法编译 我对如何修复它感到困惑 My code char newStr char charBuffer int len strlen charBuffer int i 1 char
  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • 隐式方法组转换陷阱

    我想知道为什么给定代码的输出 在 LinqPad 中执行 void Main Compare1 Action Main Dump Compare2 Main Dump bool Compare1 Delegate x return x Ac
  • C++ 非类型参数包扩展

    我正在编写由单一类型参数化的模板函数 并且具有可变数量的相同类型 而不是不同类型 的参数 它应该检查第一个值是否在其余值中 我想这样写 include
  • 使用 Selenium for C# 登录 Facebook

    我一直在使用 Selenium C 框架并尝试进行 facebook 登录 但没有任何运气 这是我到目前为止得到的 基于这篇文章 使用 Selenium 测试 Facebook Connect 应用程序 https stackoverflo
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 返回指向 std::vector 中的对象的 a

    我有一个关于返回对向量元素的引用的非常基本的问题 有一个向量vec存储类的实例Foo 我想访问这个向量中的一个元素 不想使用向量索引 我应该如何编码该方法getFoo here include
  • 从窗口内容截取屏幕截图(无边框)

    我正在寻找有关如何使用 C 将表单内容保存在位图中的解决方案 我已经尝试过使用 DrawToBitmap 但它捕获了所有带边框的窗口 这就是这段代码的结果 public static Bitmap TakeDialogScreenshot
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • std::string 在 Visual Studio 上的具体行为?

    我有一个项目需要读取 写入大文件 我决定使用 ifstream read 将这些文件一次性放入内存中 放入 std string 中 这似乎是在 C 中执行此操作的最快方法 http insanecoding blogspot com 20
  • 我应该使用多个 HttpClient 来进行批量异步 GET 请求吗?

    我有一个场景 我需要在尽可能短的时间内发出大量 GET 请求 想想大约 1000 个 我知道通常最好保留一个客户端并尽可能重用它 Create Single HTTP Client HttpClient client new HttpCli
  • C 中的 N 依赖注入 - 比链接器定义的数组更好的方法?

    Given a 库模块 在下文中称为Runner 它作为可重复使用的组件 无需重新编译 即静态链接库 中应用程序分区架构的 而不是主分区 请注意 它仅包含main 出于演示目的 Given a set 顺序无关 调用的其他模块 对象Call
  • 需要使用 openssl 加密和解密文件的示例 C 代码

    我正在用 Linux C 编写代码 我需要使用以下命令来加密和解密文件 openssl 目前 我使用系统命令 des3 e nosalt k 0123456789012345 in inp file out out file 进行加密 使用
  • win32 API 和 .NET 框架之间的选择

    我必须开发一个适用于 Windows 的应用程序 该应用程序将能够通过网络摄像头识别手势来控制鼠标 我将使用 vc 2008 进行开发 但我很困惑是使用 NET 框架还是核心 win32 API 性能对于我的应用程序非常重要 根据 Ivor
  • 如何使用简历实现一个“一网打尽”的异常处理程序?

    我想知道我怎样才能写一个抓住他们全部应用程序级别的异常处理程序将为用户提供恢复应用程序流程的选项 如果您正在运行 Windows 窗体应用程序 将处理程序添加到Application ThreadException event
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对

随机推荐