精华内容
下载资源
问答
  • unity弹出对话框的方式汇总

    万次阅读 多人点赞 2017-07-14 09:41:18
    unity 对话框的实现方式

    在做unity开发的过程中,我们经常会遇到使用提示框的情况,很多时候提示框是很好用的工具,我们习惯于使用window的messageBox显示提示信息,但是来到unity中我们发现unity并没有该弹框的API,当然有人会说UnityEditor.EditorUtility.DisplayDialog()方法不是吗,我不否认这是一个方法,但是这个只能在编辑器下显示,不能发布有什么用。其实要实现弹框,还有其他几种方式,,比如调用System.Windows.Forms.dll,,调用win32的系统方法,以及使用UGUI自己封装一个。但是前两种有局限性,只能在window平台下使用,第三种可以在任何平台下使用。
    一:System.Windows.Forms.dll的使用:
    System.Windows.Forms.dll要想在unity下使用,要先把System.Windows.Forms.dll放到unity的plugin文件下,这里存放了unity工程需要的DLL,注意System.Windows.Forms.dll需要是.net3.5以下的框架。该DLL可以在unity的安装目录下的Editor\Data\Mono\lib\mono\2.0\文件夹下找到。使用的方式也很简单,例如

    using UnityEngine;
    using System;
    using System.Windows.Forms;
    using winforms = System.Windows.Forms;
    public class test : MonoBehaviour
    {
     void Start()
    {
    MessageBox.Show("此设备故障!请及时检查!", this.GetType().Name, winforms.MessageBoxButtons.OK, winforms.MessageBoxIcon.Error);
    }
    }
    

    二:调用win32的系统方法
    该方法是调用win32的系统方法,主要实现过程如下:
    先创建一个类,

     public class Messagebox
        {
            [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
            public static extern int MessageBox(IntPtr handle, String message, String title, int type);
        }
    

    然后调用该方法

    public class test : MonoBehaviour
    {
     void Start()
    {
       Messagebox.MessageBox(IntPtr.Zero,"还没有该场景!","xxx",0);
    }
    }
    

    效果图如下:
    这里写图片描述
    三:自己封装UGUI控件的方式。
    最终的实现效果如下:
    这里写图片描述
    弹出对话框时会给整个界面覆盖一层半透明遮罩,弹框的标题支持定制,中间的text文本框可以上下滚动以适应多内容输出。
    具体的实现如下:
    一:在Canvas下创建Image,修改名字为background,修改布局为填充父控件(Canvas),修改background的颜色和透明度以适应要求,当然也可以自己添加半透明图片。
    二:在background下创建image,修改大小为200,150,修改名字为MessageBox,在MessageBox下创建Title,长度为填充父物体,高度为25,stretch与父控件上方对齐,然后创建空物体,修改名字为Content,宽度为填充父控件,高度为100,给Content添加Mask遮罩组件。给Content添加Scroll Rect组件,Scroll Rect组件设置如下
    这里写图片描述
    在Content下创建Text,来显示要显示的内容。给text添加Content Size Fitter组件,修改Vertical Fit为Preferred Size来动态适应Text内容的多少。修改Pivot为(0.5,1),然后布局设置为Top,stretch如下:
    这里写图片描述
    在MessageBox下创建空物体,重命名为ButtonGroup.布局为与父控件下部对齐,tranform设置如下:
    这里写图片描述
    最后在ButtonGroup放置两个按钮。
    最终目录结构为
    这里写图片描述
    然后是代码的编写,这个过程分为三步,第一步,基本的控件逻辑,这个脚本挂载到MessageBox上,代码如下:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    using Common;
    
    public class UIMessage : MonoBehaviour {
        public Text Title;
        public Text Content;//这个是Content下的text
        public Button Sure;
        public Button Cancle;
        void Start()
        {
            Sure.onClick.AddListener(MessageBox.Sure);
            Cancle.onClick.AddListener(MessageBox.Cancle);
           Title.text =MessageBox.TitleStr;
           Content.text = MessageBox.ContentStr;
        }
    }
    

    然后绑定相应控件。
    第二步,编写MessageBox的实现类

    using UnityEngine;
    using System.Collections;
    namespace Common
    {
        public delegate void Confim();
        public class MessageBox 
        {
           static GameObject Messagebox;
           static int Result = -1;
            public static Confim confim;
            public static string TitleStr;
            public static string ContentStr;
            public static void Show(string content)
            {          
                ContentStr = "    " + content;
                Messagebox = (GameObject)Resources.Load("Prefab/Background");
                Messagebox= GameObject.Instantiate(Messagebox,GameObject.Find("Canvas").transform) as GameObject;
                Messagebox.transform.localScale = new Vector3(1, 1, 1);            
                Messagebox.GetComponent<RectTransform>().anchoredPosition = Vector3.zero;
                Messagebox.GetComponent<RectTransform>().offsetMin = Vector2.zero;
                Messagebox.GetComponent<RectTransform>().offsetMax = Vector2.zero;      
                Time.timeScale = 1;      
            }
            public static void Show(string title,string content)
            {
                TitleStr = title;
                ContentStr ="    "+ content;
                Messagebox = (GameObject)Resources.Load("Prefab/Background");
                Messagebox = GameObject.Instantiate(Messagebox, GameObject.Find("Canvas").transform) as GameObject;
                Messagebox.transform.localScale = new Vector3(1, 1, 1);
                Messagebox.GetComponent<RectTransform>().anchoredPosition = Vector3.zero;
                Messagebox.GetComponent<RectTransform>().offsetMin = Vector2.zero;
                Messagebox.GetComponent<RectTransform>().offsetMax = Vector2.zero;    
                Time.timeScale = 1;     
            }
            public static void Sure()
            {
                if (confim!= null)
                {
                    confim();
                    GameObject.Destroy(Messagebox);
                    TitleStr = "标题";
                    ContentStr = null;
                    Time.timeScale = 0;
                }
            }     
            public static void Cancle()
            {
                Result = 2;
                GameObject.Destroy(Messagebox);
                TitleStr = "标题";
                ContentStr = null;
                Time.timeScale = 0;
            }
        }
    }
    

    第三部:使用该MessageBox实现模态弹框。

    public void test()
        {
            MessageBox.Show("XXX窗口","输出了XXXX");
            MessageBox.confim=()=>{
            //这里写你自己点击确定按钮后的操作
                Debug.Log("shabile");
            };
        }
    

    最终效果如下:
    这里写图片描述

    展开全文
  • Unity弹文件对话框

    2018-07-12 12:26:42
    文件名长度必须,不然对话框弹出 OpenDialogFile odf = new OpenDialogFile();  odf.structSize = Marshal.SizeOf(odf);  odf.file = new string(new char[256]);  odf.maxFile = odf.file.Length;  odf....

    https://docs.microsoft.com/zh-cn/windows/desktop/api/commdlg/ns-commdlg-tagofna

    lpstrFilter

    Type: LPCTSTR


    https://blog.csdn.net/weixin_38472903/article/details/78204366


     filter格式    "Excel 03文件(*.xls)\0*.xls\0Excel 07文件(*.xlsx)\0*.xlsx\0all files\0*.*\0\0"


    nMaxFile

    Type: DWORD

    The size, in characters, of the buffer pointed to by lpstrFile. The buffer must be large enough to store the path and file name string or strings, including the terminating NULL character. The GetOpenFileName and GetSaveFileName functions return FALSE if the buffer is too small to contain the file information. The buffer should be at least 256 characters long.

    文件名长度必须,不然对话框不弹出

    OpenDialogFile odf = new OpenDialogFile();
                odf.structSize = Marshal.SizeOf(odf);
                odf.file = new string(new char[256]);
                odf.maxFile = odf.file.Length;
                odf.fileTitle = new string(new char[64]);
                odf.maxFileTitle = odf.fileTitle.Length;
                odf.filter = "Excel 03文件(*.xls)\0*.xls\0Excel 07文件(*.xlsx)\0*.xlsx\0all files\0*.*\0\0";
                odf.title = "Excel文件选择";
                odf.initialDir = "D:\\";
                odf.defExt = "xls";
                odf.flags = 0x00080000 | 0x00001000 | 0x00000800 | 0x00000008;
    展开全文
  • Unity UGUI制作对话框的设计方案

    千次阅读 2017-09-08 15:41:45
    游戏中会出现大量的弹出对话框UI,这部分功能虽然简单但是里面有很多细节需要注意 1、弹出的对话框UI要屏蔽触控,不能穿透UI到下层UI甚至3D对象上面 2、弹出框层级关系可能比较复杂,可能需要在一个弹框上覆盖另一个...


    游戏中会出现大量的弹出对话框UI,这部分功能虽然简单但是里面有很多细节需要注意

    1、弹出的对话框UI要屏蔽触控,不能穿透UI到下层UI甚至3D对象上面
    2、弹出框层级关系可能比较复杂,可能需要在一个弹框上覆盖另一个弹框,需要统一管理层级的逻辑
    3、弹出框的弹出优先级需要注意,比如网游,服务器呼叫客户端弹出对话框,这个对话框我们不希望它随便弹出,必须当前场景不存在对话框的时候再弹出,这就需要把这些服务器弹框做延迟或者缓存

    4、弹出框要响应android的物理返回,如果每一个对话框都单独去写这个逻辑就很麻烦,我们需要一个统一的入口解决这个问题


    针对以上问题我这里有一个解决方案:

    1、创建一个预设体模板,所有的对话框都以这个模板创建弹出对话框UI

    2、这个预设体模板的sortOrder是递增的,每一个弹出框在实例化的时候都保证永远在最上层,同时给这个预设体添加panel用来下层界面的UI触控

    3、把做好的弹框UI(必须以模板预设体为母体)拖入Resources下用来动态实例化

    4、预设体模板中绑定脚本,控制弹框的透明度、点击事件、自动关闭事件等方法,这个脚本不需要编辑。


    制作流程如下:

    1、拖拽弹框预设体到场景中,如图

    2、设置相应属性

    3、继续用UGUI制作这个界面,但是注意所有内容必须放在PanelContent下

    4、制作好UI之后拖入Resources/PopWinDialog/Prefabs/目录下当做预设体准备被程序动态加载

    5、最后调用这个弹框的时候调用接口:

    _PopWinManager.getInstance().PopWin("预设体的名字",autoCloseTime时间(可以不传这个参数))

    用这套弹框系统还是挺方便的!相关资源下载地址:

    http://download.csdn.net/download/jbl20078/9970288

    或者有需要直接评论回复邮箱地址





    展开全文
  • 该存储库包含在实验控制软件MonkeyLogic2持续控制下并与之通信的情况下,使用Unity运行虚拟现实实验的代码。 这些程序,行为记录设备和电生理设备之间的通信由处理。 请参阅参考资料中的详细说明,以及有关...
  • 脚本弹出对话框Creating a popup menu in Flash isn’t as difficult as it seems. Here, we’ll step through the process involved in creating yoru won Flash popup menu. 在Flash中创建弹出菜单并不像看起来...

    脚本弹出对话框

    Creating a popup menu in Flash isn’t as difficult as it seems. Here, we’ll step through the process involved in creating yoru won Flash popup menu.

    在Flash中创建弹出菜单并不像看起来那样困难。 在这里,我们将逐步介绍创建yoru won Flash弹出菜单所涉及的过程。

    Note that this tutorial assumes you know how to create an Invisible button.

    请注意,本教程假定您知道如何创建不可见按钮。

    1. Create a button object. I called my button "menu".

    1.创建一个按钮对象。 我称按钮为“菜单”。

    2. Select the button object, press f8, and check radio movieclip to convert it to a movieclip. Name this movieclip "popup".

    2.选择按钮对象,按f8,然后检查单选动画片段以将其转换为动画片段。 将此动画片段命名为“弹出”。

    3. Now, go into the time line of the popup movieclip. Select the current layer, and name it "button".

    3.现在,进入弹出动画片段的时间线。 选择当前层,并将其命名为“按钮”。

    4. Create two key frames in the button layer. Select the first key frame and insert:

    4.在按钮层中创建两个关键帧。 选择第一个关键帧并插入:

    stop ();

    5. Select the second key frame and insert the same action:

    5.选择第二个关键帧并插入相同的操作:

    stop ();

    6. Now select the first key frame. Give this action to the menu button:

    6.现在选择第一个关键帧。 将此操作交给菜单按钮:

    on (rollOver)
    {
    gotoAndStop (2);
    }

    7. Lock the button layer.

    7.锁定按钮层。

    8. Next, create a new layer above the button layer, and name it "popup".

    8.接下来,在button层上方创建一个新层,并将其命名为“ popup”。

    9. Create a popup window, and create two key frames in this layer.

    9.创建一个弹出窗口,并在此层中创建两个关键帧。

    10. Now, select the first key frame in the popup layer and press delete. Then, lock the popup layer.

    10.现在,在弹出层中选择第一个关键帧,然后按Delete键。 然后,锁定弹出层。

    11. Create a new layer above the popup layer. Name it "invisiblebutton".

    11.在弹出层上方创建一个新层。 将其命名为“ invisiblebutton”。

    1188_1

    12. Create an invisible button, then select the invisiblebutton layer and extend it two frames. Finally, insert the following aciton:

    12.创建一个不可见的按钮,然后选择invisiblebutton图层并将其扩展两个框架。 最后,插入以下密码:

    on (rollOver)
    {
    gotoAndStop (1);
    }

    Once this is done, lock the layer.

    完成此操作后,锁定图层。

    That wraps up the basics! You can now go on to customize the popup window and include separate buttons as required. Good luck!

    总结了基础知识! 现在,您可以继续自定义弹出窗口,并根据需要包括单独的按钮。 祝好运!

    Download the sample files here.

    在此处下载示例文件

    翻译自: https://www.sitepoint.com/flash-script-popup-menu/

    脚本弹出对话框

    展开全文
  • 通过DOM生成一个input file按钮,调用click可以弹出。 但是问题: 游览器安全设置,无法模拟点击file按钮,在console里面可以跳出对话框,但是代码调用没有办法执行,必须点击按钮。 unity用UGUI拼的Button,点击...
  • Unity3D】对话框、隐藏与显示、拖拽

    万次阅读 多人点赞 2017-04-15 17:20:31
    对话框在任何一个地方都随处可见,在游戏里面也肯定不例外啊,那么在Unity3D如何利用UGUI实现一个对话框呢?并且这个对话框可以任意拖拽,更重要的是,我可以想让它显示就显示,隐藏就隐藏,就是一个模态框Modal的...
  • 提示框主体 智能提示的应用场景: 任务完成、角色死亡、子弹不足、游戏超时 一、任务完成 二、角色死亡 三、子弹不足 四、游戏超时 代码 public void tip() ... } } 附完整教程: Unity2d Rubys Adventure 课程设计报告
  • Unity开发VR之Vuforia 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分享、心创新!助力...
  • unity 确定与取消对话框

    千次阅读 2017-10-19 23:41:49
    UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有...对话框代码using System.Collections; using System.Collections.Generic;
  • unity确定与取消对话框,一个类的函数作为委托事件传到另一个类中
  • 想让游戏在特定场景弹出对话框,比如说碰到门的时候弹出对话,然后按E 进入房间 创建方法 进入到之前 那个canvas面板新建一个panel 可以在此调颜色 设置好后gameObjec 之后,需要把要执行的...
  • 可是并没有unity的提示框弹出,我新建的类的代码如下: ``` using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using ...
  • 这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~
  • iOS---弹出提示对话框的封装

    千次阅读 2016-09-20 16:21:42
    IOS—弹出提示对话框的封装一、就一个选项的对话框代码块#pragma mark - 封装弹出对话框方法 // 提示错误信息 - (void)showError:(NSString *)errorMsg { // 1.弹框提醒 // 初始化对话框 UIAlertController *...
  • 一套unity ugui 窗体弹出多层遮罩管理的代码,有弹出 关闭 等功能
  • Unity利用GUI做的对话框

    千次阅读 2016-11-17 08:34:47
    Unity里自己写的对话框,点击按钮弹出对话框,点击对话框中的按钮,退出对话框 部分代码如下 void OnGUI() { GUI.Box(new Rect(Screen.width/2,Screen.height/2,Screen.width/5,Screen.height/4), "信息...
  • Unity发布WebGL时,打开文件对话框使用Win32和Dll的方式行不通,这里使用C#调用JS方法是可以的
  • Unity资源Assetmport New Asset对话框
  • 解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题 <meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" /> 转载于:...
  • 最近在做一个项目,甲方要求自己可以更换LOGO图标,通过参考其他的博客弹出对话框(地址 https://blog.csdn.net/weixin_38472903/article/details/78204366 ),并通过自己的修改最终实现了此项功能。此方式是首先是...
  • 在window平台下,有时我们需要打开或则保存一些东西到指定目录下,这时我们不需要再重复造轮子,完全可以调用系统的文件窗口,具体的调用如下:第一步:创建打开窗口和保存窗口的类。using UnityEngine;...
  • Unity 通用弹出

    千次阅读 2018-10-28 17:39:08
    因为项目中要经常用到一些提示框,弹出框之类的通用组建,所以写了一个,方便以后使用   效果展示:   预设物结构:   代码展示: using UnityEngine; using UnityEngine.UI; public delegate void ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,116
精华内容 846
关键字:

unity弹出对话框