栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

unity自定义弹出框功能

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

unity自定义弹出框功能

本文实例为大家分享了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
{
  /// 
  /// true表示模态框
  /// 
  public static bool type;
  //三个委托,分别为三个按钮的点击运行事件
  public static Action clickOk;
  public static Action clickRetry;
  public static Action clickCancel;
  public static DialogResult dialogResult;
  //标题
  public static string headText;
  //文本
  public static string text;
  //状态。用于显示或隐藏弹出框
  public static bool state;

  /// 
  ///重试按钮点击事件
  /// 
  public static void onClickRetry()
  {
    state = false;
    clickRetry?.Invoke();
    clickRetry = null;
  }
  /// 
  /// 取消按钮点击事件
  /// 
  public static void onClickCancel()
  {
    state = false;
    clickCancel?.Invoke();
    clickCancel = null;
  }
  /// 
  /// 确定按钮点击事件
  /// 
  public static void onClickOk()
  {
    state = false;
    clickOk?.Invoke();
    clickOk = null;
  }

  /// 
  /// 显示
  /// 
  /// 内容
  /// 标题
  /// 样式
  /// 模式
  public static void Show(string _text,string _head,DialogResult _dialog, bool _type = true)
  {
    text = _text;
    headText = _head;
    dialogResult = _dialog;
    type = _type;
    state = true;
  }
  public static void Show(string _text,string _head,bool _type = true)
  {
    text = _text;
    headText = _head;
    dialogResult = DialogResult.Ok;
    type = _type;
    state = true;
  }
  public static void Show(string _text, bool _type = true)
  {
    text = _text;
    headText = "信息";
    dialogResult = DialogResult.Ok;
    type = _type;
    state = true;
  }

}

三、UiMessage代码

添加到Message物体上。用于控制弹出框的显示等功能。

using UnityEngine;
using UnityEngine.UI;

public class UiMessage : MonoBehaviour
{
  public Button ok;
  public Button cancel;
  public Button retry;
  /// 
  /// 遮罩
  /// 
  public GameObject panel;
  public Text headText;
  public Text text;
  /// 
  /// 弹出框
  /// 
  private GameObject messageBox;

  private void Awake()
  {
    messageBox = gameObject.transform.GetChild(1).gameObject;
    ok = messageBox.transform.Find("ok").GetComponent

四、显示框的调用

此处调用可以自行设置一个按钮,在其点击事件中注册调用即可。

笔者使用项目中的方式进行演示。具体不做说明。调用方式已给出。

特别注意:由于UiMessage调用了MessageBox的方法,所以必须先初始化MessageBox的数据。使用什么就初始化什么。笔者使用了ok、cancel按钮(默认不初始化模式,即为模态框,不初始化DialogResult即为只显示ok按钮),所以注册了相应的点击事件(委托)。最后显示弹出框(整个包含遮罩和弹出框)。

五、运行结果

六、弹出框可拖拽移动

将DragManage添加到MessageBox物体上面。(如果你想让ui物体可拖拽,对其添加DragManage即可实现)

笔者就不做演示了

using UnityEngine;
using UnityEngine.EventSystems;

/// 
/// 只是用来处理拖拽
/// 
public class DragManage : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
  private Vector3 offect;

  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;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号