本文实例为大家分享了unity自定义弹出框的具体方法,供大家参考,具体内容如下
一、弹出框的搭建
布局如图:Message为整个父物体,并且添加UiMessage代码。panel为遮罩。
MessageBox为整个提示框,Panel为标题,ok为确定按钮,cancel为取消按钮,retry为重试按钮,Text为提示框的文字。
注意大小写,后面代码会根据名称进行获取对应组建。
效果如下:
二、MessageBox代码
要说明的都在代码中注释了。仿照Windows的提示框功能,如果功能不足可自行添加。例如关闭按钮、显示图标等。
using System;
public enum DialogResult{Ok,OKCancel,RetryCancel,YesNo,YesNoCancel}
public static class MessageBox{///
///
///
}
三、UiMessage代码
添加到Message物体上。用于控制弹出框的显示等功能。
using UnityEngine;using UnityEngine.UI;
public class UiMessage : MonoBehaviour{public Button ok;public Button cancel;public Button retry;///
private void Awake(){messageBox = gameObject.transform.GetChild(1).gameObject;ok = messageBox.transform.Find("ok").GetComponent
//将提示框居中显示messageBox.transform.position = new Vector3(Screen.width / 2 - messageBox.GetComponent
private void OnEnable(){init();}
private void init(){ok.onClick.AddListener(MessageBox.onClickOk);cancel.onClick.AddListener(MessageBox.onClickCancel);retry.onClick.AddListener(MessageBox.onClickRetry);text.text = MessageBox.text;headText.text = MessageBox.headText;
//根据传递的参数,进行样式的显示switch (MessageBox.dialogResult){case DialogResult.Ok:ok.gameObject.SetActive(true);cancel.gameObject.SetActive(false);retry.gameObject.SetActive(false);break;case DialogResult.OKCancel:ok.gameObject.SetActive(true);cancel.gameObject.SetActive(true);retry.gameObject.SetActive(false);break;case DialogResult.RetryCancel:ok.gameObject.SetActive(true);cancel.gameObject.SetActive(true);retry.gameObject.SetActive(true);break;case DialogResult.YesNo:ok.transform.GetChild(0).GetComponent
private void Update(){panel.SetActive(MessageBox.type);gameObject.SetActive(MessageBox.state);}}
四、显示框的调用
此处调用可以自行设置一个按钮,在其点击事件中注册调用即可。
笔者使用项目中的方式进行演示。具体不做说明。调用方式已给出。
特别注意:
由于UiMessage调用了MessageBox的方法,所以必须先初始化MessageBox的数据。使用什么就初始化什么。笔者使用了ok、cancel按钮(默认不初始化模式,即为模态框,不初始化DialogResult即为只显示ok按钮),所以注册了相应的点击事件(委托)。最后显示弹出框(整个包含遮罩和弹出框)。
五、运行结果
六、弹出框可拖拽移动
将DragManage添加到MessageBox物体上面。(如果你想让ui物体可拖拽,对其添加DragManage即可实现)
笔者就不做演示了using UnityEngine;using UnityEngine.EventSystems;
///
public void OnBeginDrag(PointerEventData eventData){offect = Input.mousePosition - transform.position;}
public void OnDrag(PointerEventData eventData){transform.position = Input.mousePosition - offect;}
public void OnEndDrag(PointerEventData eventData){transform.position = Input.mousePosition - offect;}}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:C# winform实现右下角弹出窗口结果的方法C#实现客户端弹出消息框封装类实例
