Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)

这篇具有很好参考价值的文章主要介绍了Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在开发 PC 端项目时,有时我们需要提醒用户进行相关操作 / 提示用户下一步该如何操作

那么我们就需要与 Windows 进行交互,来告诉 Windows 弹个框出来

去提醒用户,确认/取消 是/否 

这里有两种方法:

1.调用User32.dll外部库,实现弹框

unity 弹窗提示,Unity应用及扩展,windows,unity

 文章来源地址https://www.toymoban.com/news/detail-641735.html

2.调用System.Windows.Forms.dll 外部库,实现弹框

unity 弹窗提示,Unity应用及扩展,windows,unity

 

一、调用User32.dll外部库,实现弹框
这里我介绍 Unity 中需要外部引用库,调用其中的函数实现弹框
unity 弹窗提示,Unity应用及扩展,windows,unity

 

1.先创建一个脚本 ChinarMessage ,不用继承 Mono
 
//-----------------------
// @Author GarFey
// @date 20190612
// @version 1.0
//-----------------------
using System;
using System.Runtime.InteropServices;//调用外部库,需要引用命名空间

///
/// 为了调用外部库脚本
///
public class ChinarMessage
{
    [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
    public static extern int MessageBox(IntPtr handle, String message, String title, int type);
    //具体方法
}
2.在Unity逻辑代码中,你需要弹出提示框的地方调用提示框
提示:
点击提示框上边相应按钮的时候,会有不同的返回值
2.1
returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-0:返回值均:1", "确认", 0);
                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.2

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-1:确认:1,取消:2", "确认|取消", 1);
                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.3

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-2:中止:3,重试:4,忽略:5", "中止|重试|忽略", 2);

                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.4

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-3:是:6,否:7,取消:2", "是 | 否 | 取消", 3);

                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.5

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-4:是:6,否:7", "是 | 否", 4);

                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

2.6

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-5:重试:4,取消:2", "重试 | 取消", 5);

                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.7

returnNumber = ChinarMessage.MessageBox(IntPtr.Zero, "Chinar-6:取消:2,重试:10,继续:11", "取消 | 重试 | 继续", 6);

                print(returnNumber);

unity 弹窗提示,Unity应用及扩展,windows,unity

 

二、调用System.Windows.Forms.dll 外部库,实现弹框
这里我们可以调用 System.Windows.Forms.dll 外部库,很简单的就可以实现

unity 弹窗提示,Unity应用及扩展,windows,unity

点击下载 System.Windows.Forms.dllhttps://pan.baidu.com/s/1ZLUdclF7AzTPuBFmyNs1UQ
获取到的dll后,放到Unity的Plugine目录下。
unity 弹窗提示,Unity应用及扩展,windows,unity

 

注意:
由于 Unity的机制 ,一定要新建一个空文件夹“Plugins”
将 System.Windows.Forms.dll 文件放到该文件夹下才行
在Unity逻辑代码中,你需要弹出提示框的地方调用提示框
在你的调用的类中,添加如下的引用
using MsgBoxBase = System.Windows.Forms.MessageBox; //引用命名空间下消息类
using WinForms = System.Windows.Forms;              //引用命名空间
2.1
               
//Asterisk:包含一个符号,该符号在圆圈中包含小写字母 i。
//OK:OK按钮

MsgBoxBase.Show("Chinar,OK按钮,灯泡图标", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Asterisk);

unity 弹窗提示,Unity应用及扩展,windows,unity

2.2

//Error:包含一个符号,该符号包含一个红色背景圆圈,圆圈中为白色 X 符号。
//AbortRetryIgnore:包含中止、 重试和忽略按钮。

MsgBoxBase.Show("Chinar,中止|重试|忽略,错误图标", GetType().Name, WinForms.MessageBoxButtons.AbortRetryIgnore, WinForms.MessageBoxIcon.Error);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.3

//Exclamation:包含一个符号,该符号包含一个黄色背景三角形,三角形中为感叹号。
//OKCancel:中包含确定和取消按钮。

MsgBoxBase.Show("Chinar,确定|取消,三角感叹号", GetType().Name, WinForms.MessageBoxButtons.OKCancel, WinForms.MessageBoxIcon.Exclamation);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.4

//Hand: 包含一个符号,该符号包含一个红色背景圆圈,圆圈中为白色 X 符号。
//RetryCancel:重试和取消按钮

MsgBoxBase.Show("Chinar,重试 | 取消,(同错误图标)", GetType().Name, WinForms.MessageBoxButtons.RetryCancel, WinForms.MessageBoxIcon.Hand);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.5

//Information:包含一个符号,该符号在圆圈中包含小写字母 i。
//YesNo:是和否按钮

switch (MsgBoxBase.Show("Chinar,是 | 否,灯泡", GetType().Name, WinForms.MessageBoxButtons.YesNo, WinForms.MessageBoxIcon.Information))
{
    case WinForms.DialogResult.Yes:
         print("对");
         break;
    case WinForms.DialogResult.No:
         print("错");
         break;
    case WinForms.DialogResult.None:
         print("无");
         break;
 }

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.6

//None:未包含符号。
//YesNoCancel:是、否、取消按钮

MsgBoxBase.Show("Chinar,是 | 否 | 取消,无图标", GetType().Name, WinForms.MessageBoxButtons.YesNoCancel, WinForms.MessageBoxIcon.None);

unity 弹窗提示,Unity应用及扩展,windows,unity

 2.7

//Question:包含一个符号,该符号包含一个圆圈,圆圈中为问号。 不再建议使用问号消息图标,因为这种图标无法清楚地表示特定类型的消息,并且作为问题的消息表述可应用于任何消息类型。 此外,用户可能会将问号消息符号与帮助信息混淆。 因此,不要在中使用问号消息符号。 系统继续支持它包含的内容,只为满足反向兼容性。

MsgBoxBase.Show("Chinar,OK按钮,问号?", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Question);

unity 弹窗提示,Unity应用及扩展,windows,unity

 

//Stop:包含一个符号,该符号包含一个红色背景圆圈,圆圈中为白色 X 符号。
                MsgBoxBase.Show("Chinar,OK按钮,停止", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Stop);
【图丢失】
//Warning:包含一个符号,该符号包含一个黄色背景三角形,三角形中为感叹号。
                MsgBoxBase.Show("Chinar,OK按钮,警告", GetType().Name, WinForms.MessageBoxButtons.OK, WinForms.MessageBoxIcon.Warning);
【图丢失】
提示:
点击提示框上边相应按钮的时候,会有不同的返回值
WinForms.DialogResult.Yes: / No / None /Cancel 等等
上边代码中,我写有一个例子,可以根据情况自己写判定规则
 switch (MsgBoxBase.Show("Chinar,是 | 否,灯泡", GetType().Name, WinForms.MessageBoxButtons.YesNo, WinForms.MessageBoxIcon.Information))
                {
                    case WinForms.DialogResult.Yes:
                        print("对");
                        break;
                    case WinForms.DialogResult.No:
                        print("错");
                        break;
                    case WinForms.DialogResult.None:
                        print("无");
                        break;
                }

到了这里,关于Unity调用Windows弹框(User32.dll/System.Windows.Forms.dll)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity 调用C++ dll 操作升级套娃函数调用

    之前一直以为C++生成dll,在unity中调用时要把传出去的值设置在主函数中,以参数或反回值的形式。 当然在DLL工程中可以说没有主函数,那个可以运行一个函数,其会调用其他函数从而一直调其他相关函数。 那问题是在层级是二或三------时被调用的那个函数的计算结果怎么能

    2024年02月13日
    浏览(29)
  • unity 调用C++ dll 有类和指针操作

    这个在之前unity 调用C++ dll 操作升级套娃函数调用_天人合一peng的博客-CSDN博客的基础上,但实事时类相互嵌套,非常不好处理。 1 测试直接将main()生成dll程序能运行不。  发现是可以的。 2 那就是想方法把对象或指针的操作的下一级函数直接写到main里面,不就可以可以了吗。

    2024年02月16日
    浏览(24)
  • 解决Windows找不到api-ms-win-downlevel-user32-l1-1-0.dll无法启动程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个api-ms-win-downlevel-user32-l1-1-0.dll文件进行安装(前提是找到适合的

    2024年02月14日
    浏览(55)
  • C#winform软件移植上linux的秘密,用GTK开发System.Windows.Forms

    国产系统大势所趋,如果你公司的winform界面软件需要在linux上运行,如果软件是用C#开发的,现在我有一个好的快速解决方案。 世界第一的微软的Microsoft Visual Studio,确实好用,C# 开发起来确实效率高,不过微软的开发语言开发的软件的界面都是跟windows系统绑定的,现在.ne

    2024年02月12日
    浏览(26)
  • Unity——在C#中调用C++动态链接库(DLL)

    1、新建C++空项目 打开VS,新建一个C++空项目,自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目,点击属性,打开项目属性页,将常规中的配置类型改为动态库(.dll)。  3、添加.h头文件 右键头文件,点击添加—新建项,选择头文件.h,命名为DllForUnity.h,点击

    2024年02月10日
    浏览(28)
  • 无法定位程序输入点 invalid parameter noinfo noreturn 于动态链接库c: Windows SYSTEM32 MSVCP100.dll 上

    本文错误为在学习PHY6222这款芯片时,点击在线烧录调试工具SocKit_V3.0.3报出的错误 Visual Studio 2010 (VC++ 10.0) 解决 微软官方网址 https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist?view=msvc-170 在出现这个问题之前,报错为缺少MSVCP100.dll 于是去网上下载然后放在C盘对应文件夹

    2024年02月01日
    浏览(28)
  • 使用Rider C# Dll工程和Unity工程互相调用、断点方法

    创建C# Dll工程,生成C#工程Dll 创建Unity工程 Unity调用C#工程的代码 C#工程调用Unity工程的代码 断点方法 创建工程 选这个,注意UnityEngineDll这个选项,要选你目标unity版本的Dll 生成Dll 右键工程 简单,能看到这篇文章的都是优秀的同学,所以,此步略过 下面这两个复制到unity工程

    2024年01月20日
    浏览(45)
  • Unity调用微软SpeechLib.Dll的C#类实现语音合成功能

    using System.Collections; using System.Collections.Generic; using UnityEngine; using SpeechLib; public class Speech : MonoBehaviour { // Start is called before the first frame update void Start() { } 将Interop.SpeechLib.dll文件导入Unity,然后把上面的脚本挂载到游戏对象上就能测试语音合成的效果了。 经测试 调用v.Speak这个方

    2024年02月13日
    浏览(34)
  • 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 在 System.Windows.Forms.UnsafeNativeMethods.C

    今天在有些客户的电脑上安装程序时日志提示了以下错误: 2023-03-10 08:34:42.659 +08:00 [INF] 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) 在 System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid clsid, Object punkOuter, Int32 context, Guid iid) 在 System.Windows.Forms.AxHost.CreateWithLicense(Strin

    2024年02月02日
    浏览(24)
  • 无法启动程序,丢失user32.dll gdi32full.dll win32u.dll解决办法

    首先确保dll文件放在正确的位置: 32位系统将dll文件放在C:WindowsSystem32 文件夹内。64位系统将dll文件放在C:WindowsSystem32 文件夹和C:WindowsSysWOW64 文件夹内,保存两份。 模块已加载,但找不到入口点DLLRegisterServer 通常在运行中注册动态库文件: regsvr32 xxx.dll (按回车键执行命令

    2024年02月05日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包