Unity之MessageBox
来源:互联网 发布:js display:none 编辑:程序博客网 时间:2024/05/17 09:34
先上示意图:
从图中可以看出,这是标准的MessageBox样式。我采用的是UGUI,中间是文字内容,下面包括确定取消两个按钮,右上角一个关闭按钮。
那么模仿MFC呢,我写了一个枚举如下:
public enum MessageType{ Confirm, //确定 Cancel, //取消 ConfirmCancel, //确定取消 Yes, //是 No, //否 YesNO, //是否}
从上可以看出,这是在定义按钮的样式,举例:Confirm指仅包括确定按钮。
接下来,直接上挂在该UI上的脚本代码:
using System;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;public class MessageBoxDialog : MonoBehaviour{ public GameObject CancelButton = null; //取消按钮 public GameObject ConfirmButton = null; //确定按钮 public GameObject CloseButton = null; //关闭按钮 public Text MessageText = null; //提示文字 public Text ConfirmText = null; //确定文字 public Text CancelText = null; //取消文字 public Action OnCloseEvent = null; public Action OnConfirmEvent = null; // Use this for initialization void Start() { AddListener(); } // Update is called once per frame void Update() { } private void AddListener() { if (CancelButton != null) { EventTriggerListener.Get(CancelButton).onClick = OnCancelButtonClicked; } if (ConfirmButton != null) { EventTriggerListener.Get(ConfirmButton).onClick = OnConfirmButtonClicked; } } private void OnConfirmButtonClicked(GameObject go, BaseEventData eventData) { if (OnConfirmEvent != null) { OnConfirmEvent(); } else { OnCloseButtonClicked(null, null); } } private void OnCancelButtonClicked(GameObject go, BaseEventData eventData) { if (OnCloseEvent != null) { OnCloseEvent(); } else { OnCloseButtonClicked(null, null); } } private void OnCloseButtonClicked(GameObject go, BaseEventData eventData) { GameObject.DestroyImmediate(gameObject); } public void UpdateButton(MessageType type) { switch (type) { case MessageType.ConfirmCancel: break; case MessageType.Cancel: ConfirmButton.SetActive(false); break; case MessageType.Confirm: CancelButton.SetActive(false); break; case MessageType.No: ConfirmButton.SetActive(false); CancelText.text = "否"; break; case MessageType.Yes: CancelButton.SetActive(false); ConfirmText.text = "是"; break; case MessageType.YesNO: ConfirmText.text = "是"; CancelText.text = "否"; break; } }}
接下来是该篇文章的重点代码了,
using System;using UnityEngine;public class MessageBox{ private static GameObject _messageBoxPrefab = null; private static GameObject _messageBox = null; private static string _messageBoxPrefabPath = "UI/MessageBox"; public static void Show(string info, MessageType type = MessageType.ConfirmCancel, Action cancelCallback = null, Action confirmCallback = null) { if (_messageBoxPrefab == null) { _messageBoxPrefab = Resources.Load(_messageBoxPrefabPath) as GameObject; } _messageBox = GameObject.Instantiate(_messageBoxPrefab) as GameObject; MessageBoxDialog msgbox = _messageBox.GetComponent<MessageBoxDialog>(); msgbox.UpdateButton(type); msgbox.OnConfirmEvent += confirmCallback; msgbox.OnCloseEvent += cancelCallback; msgbox.MessageText.text = info; //以下是在自己的场景管理的基础上写的,既然这里还没讲到我的场景管理,就暂时用比较low的方法了 //GameObject uiRoot = ScenesManager.Instance.CurScene.UiRoot.gameObject; //_messageBox.transform.SetParent(uiRoot.transform, false); GameObject canvas = GameObject.Find("Canvas"); if(canvas != null) { _messageBox.transform.SetParent(canvas.transform, false); } }}
该段代码中,大家应该注意到三点:
1、MessageBox的预制件路径,修改为自己的路径;
2、加载该预制件的方法,我用的是Resources.Load,这里并没有将我的资源管理介绍出来,所以就用的这个;
3、实例化该UI,给该UI赋父物体的时候,用的是比较low的方法,注释已经解释了。
接下来,就直接上工程了,大家 如有疑问,请留言。
链接:http://pan.baidu.com/s/1kVibxQJ 密码:45ql
以上知识分享,如有错误,欢迎指出,共同学习,共同进步。
1 0
- Unity之MessageBox
- unity开发之原创MessageBox小部件
- c#之MessageBox
- MFC之MessageBox用法
- MFC之MessageBox用法
- QT笔记之MessageBox
- MFC之MessageBox用法
- Ext之Ext.MessageBox
- MFC之MessageBox用法
- MFC之MessageBox用法
- Win32API之MessageBox
- Ext控件之MessageBox
- Windows编程之MessageBox
- win32 application之MessageBox
- MFC之MessageBox用法
- ExtJS学习之MessageBox
- MFC之MessageBox
- C#之MessageBox
- JQ 写带!important 的css样式
- 腾讯笔试、OMG一面、二面、HR面
- OpenGL学习笔记6:高级纹理知识
- Yet Another Game of Stones
- 从零开始学Makefile(十三)
- Unity之MessageBox
- git管理代码忽略无效文件
- 与VPS相比,云服务器优势有哪些
- 【Unet】Unet动态添加多个主角
- LargeVis可视化技术学习
- hdu 3367 Pseudoforest
- js跨域问题
- window中的cmd中的mysql的相关操作命令
- 从零开始学Makefile(十四)