精华内容
下载资源
问答
  • Fungus_v2.2.2Unity对话框插件,简单制作对话框逻辑。仅用于学习,请勿用于商业项目
  • 万能模态对话框 万能模态对话框 万能模态对话框 万能模态对话框 uDialog unity 模态对话框,通用
  • 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制作对话框

    千次阅读 2020-01-15 10:40:34
    在我们平时玩的角色扮演的游戏中比如GTA等 其中少不了故事情节 不少是用对话框来表达的 这篇博客给大家介绍一下 简单的故事情节的讲述模式 一般的都时按下鼠标左键继续的 我的这个也一样 然后检测到鼠标左键的按下 ...

    最近在准备计算机设计大赛的游戏方向的比赛,研究一些游戏中的游戏效果的实现
    在我们平时玩的角色扮演的游戏中比如GTA等 其中少不了故事情节 不少是用对话框来表达的
    这篇博客给大家介绍一下 简单的故事情节的讲述模式
    一般的都时按下鼠标左键继续的
    我的这个也一样
    在这里插入图片描述
    然后检测到鼠标左键的按下 进行下一步

    而且用到打字机的效果实现 如果不清楚的可以去前面我的博客查看
    因为添加了打字的效果 代码稍微麻烦一点
    而且刚开始我也走了弯路 尝试在代码中用ui来实现语句的切换

    然后我发现利用数组可以很简单的实现 效果也很好

    代码块

    public float charsPerSecond = 0.2f;//打字时间间隔
        private string[] words = {"欢迎来到我的对话框","接下来给大家看一下","快要结束了哦" };
        //保存需要显示的文字 我这里面是三句
        public int strindex = 0;//控制语句
    
        private bool isActive = false;
        private float timer;//计时器
        private Text myText;
        public int currentPos = 0;//当前打字位置
    
        void Start()
        {
            timer = 0;
            isActive = true;
            myText = GetComponent<Text>();
        }
        void Update()
        {
            OnStartWriter();
            if (Input.GetMouseButtonDown(0))
            {
                strindex++;//下一句
                isActive = true;
                if (strindex >= 2)//防止超出数组的长度报错
                {
                    strindex = 2;
                }
            }
        }
    
        public void StartEffect()
        {
            isActive = true;
        }
        /// 执行打字任务
        void OnStartWriter()
        {
            if (isActive)
            {
                timer += Time.deltaTime;
                if (timer >= charsPerSecond)
                {//判断计时器时间是否到达
                    timer = 0;
                    currentPos++;
                    myText.text = words[strindex].Substring(0, currentPos);//刷新文本显示内容
    
                    if (currentPos >= words[strindex].Length)
                    {
                        OnFinish();
                    }
                }
    
            }
        }
        /// 结束打字,初始化数据
        void OnFinish()
        {
            isActive = false ;
            timer = 0;
            currentPos = 0;
        }
    

    如果大家看了我前面的 unity实现打字机的博客 https://blog.csdn.net/weixin_44302602/article/details/103912825

    这个会稍微好理解一些 我们可以下载一些音效 效果会更好的

    当然也有更简单的效果

     public Text[] texts;
        public  int index = 0;
    
        private void Update()
        {
            
            for(int i = 0; i < texts.Length; i++)
            {
                texts[i].enabled = false;
            }
            texts[index].enabled = true;
            if (Input.GetMouseButtonDown(0))
            {
                index++;
    
            }
            index %= texts.Length;//这个防止超出数组的界限
        }
    

    这个是需要在unity中赋值的 而且要创建好几个不同的text来切换(不会有打字机的效果)

    如果你也是unity爱好者 欢迎关注我 我会持续更新我的学习博客

    展开全文
  • unity 文件对话框的打开

    千次阅读 2017-12-22 12:02:35
    unity 动态添加脚本到prefab上 并实例化组件 获取到assets文件夹路径 并通过EditorUtility.OpenFilePanel()打开的文件夹对话框 字符串的截取(左边开始删除多少位) AudioSource的获取 Mathf.Floor()将浮点数转换为...
    展开全文
  • Unity调用系统对话框

    2020-02-27 21:23:22
    Unity做PC的时候,如果对于一些简单的提示框没有过多要求,可以调用Windows系统对话框 效果如下: 代码很简单 public class DllTest { [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar...

    Unity做PC的时候,如果对于一些简单的提示框没有过多要求,可以调用Windows系统对话框

    效果如下:

    代码很简单

    public class DllTest
    {
        [DllImport("User32.dll", SetLastError = true, ThrowOnUnmappableChar = true, CharSet = CharSet.Auto)]
        public static extern int MessageBox(IntPtr handle, String message, String title, int type);
    }
    
    
    
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Test : MonoBehaviour {
    
    	// Use this for initialization
    	void Start ()
        {
            DllTest.MessageBox(IntPtr.Zero, "这是一个提示", "这是一个测试", 0);
        }
    	
    }

     

    当然网上还有MessageBox.Show这种方法,小伙伴们自行选择即可

    展开全文
  • Unity自适应Text对话框

    千次阅读 2019-07-16 13:56:56
    制作一个对话框,让框能随着文本的长度和高度变化。 模式一 一个随文本的实时输入而自动适应的对话框。 1.效果: 2.层级与组件: frame就是个Image对话框图,锚点和Text一样,使用ContentSizeFitter组件使...
  • 在window平台下,有时我们需要打开或则保存一些东西到指定目录下,这时我们不需要再重复造轮子,完全可以调用系统的文件窗口,具体的调用如下:第一步:创建打开窗口和保存窗口的类。using UnityEngine;...
  • unity确定与取消对话框,一个类的函数作为委托事件传到另一个类中
  • unity3d打开对话框

    2016-10-13 19:09:00
    最近一直在忙项目,没时间更新博客,这两天趁空封装windows下的打开对话框,支持多选。其他系统可以用ngui或者ugui封装一个。 这里就不上封装的源码了提供dll供小伙伴们使用,如果有需要源码请请留言。 以下是...
  • 因为全屏情况下,开启对话框,然后点击unity窗口,对话框就找不到了,在unity窗口的后面了,我用的OpenFileDialog,求解
  • 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....
  • unity 确定与取消对话框

    千次阅读 2017-10-19 23:41:49
    UnityEvent本质上是继承自UnityEventBase的类,它的AddListener()方法能够注册UnityAction,RemoveListener能够取消注册UnityAction,还有...对话框代码using System.Collections; using System.Collections.Generic;
  • Unity UGUI制作对话框的设计方案

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

    2019-09-08 22:40:00
    [https://img.0x96m.com/u3d_diglog/no_editor.jpg] unity3d调用win32打开对话框 DllTest using UnityEngine; using System.Collections; using System; using System.Runtime.InteropServices; [StructLayout...
  • 最近有个PC上的项目,其中有个功能是将项目内的数据保存到电脑上,就像平常我们在windows下将文件另存到其他地方一样,话不多说上代码 using UnityEngine; using System.Collections; using System;...
  • 这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~这是一个很牛逼的对话框插件~~~~~
  • Unity发布WebGL时,打开文件对话框使用Win32和Dll的方式行不通,这里使用C#调用JS方法是可以的
  • unity简单实现RPG对话框

    千次阅读 2018-08-24 10:26:19
    对话框的类结构 工程基于本人的GameFrame框架 主要逻辑如下 void ChangeScence() { Singleton&lt;SceneManager&gt;.GetInstance().LoadScene("Login", () =&gt; { Singleton&...
  • unity之简单的对话框

    千次阅读 2015-01-09 22:15:33
     在今天的空余时间,我还抽空看了一下对话框的制作,在一个游戏中,NPC是不可缺少的,在接任务,买装备的时候和NPC对话就必不可少了,下面让我们来制作对话框。  我们要实现的功能是,当鼠标点在NPC身上的时候,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 418
精华内容 167
关键字:

unity对话框