유 니 티 사용자 정의 팝 업 상자 기능

본 사례 는 유 니 티 사용자 정의 팝 업 상자 의 구체 적 인 방법 을 공유 하 였 으 며,구체 적 인 내용 은 다음 과 같 습 니 다.
1.팝 업 프레임 의 구축
그림 과 같은 레이아웃:Message 는 전체 부모 물체 이 고 UiMessage 코드 를 추가 합 니 다.패 널 커버.
Message Box 는 전체 알림 상자,Panel 은 제목,ok 은 확인 단추,cancel 은 취소 단추,retry 는 재 시도 단추,Text 는 알림 상자 의 텍스트 입 니 다.
대소 문자 에 주의 하 세 요.뒤의 코드 는 이름 에 따라 해당 하 는 구성 을 가 져 옵 니 다.

효 과 는 다음 과 같 습 니 다:


2.Message Box 코드
설명 할 것 은 모두 코드 에 주석 을 달 았 다.윈도 의 알림 상자 기능 을 본 떠 서 기능 이 부족 하면 스스로 추가 할 수 있 습 니 다.예 를 들 어 닫 기 단추,아이콘 표시 등.

using System;

public enum DialogResult
{
  Ok,
  OKCancel,
  RetryCancel,
  YesNo,
  YesNoCancel
}

public static class MessageBox
{
  /// <summary>
  /// true     
  /// </summary>
  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;

  /// <summary>
  ///        
  /// </summary>
  public static void onClickRetry()
  {
    state = false;
    clickRetry?.Invoke();
    clickRetry = null;
  }
  /// <summary>
  ///         
  /// </summary>
  public static void onClickCancel()
  {
    state = false;
    clickCancel?.Invoke();
    clickCancel = null;
  }
  /// <summary>
  ///         
  /// </summary>
  public static void onClickOk()
  {
    state = false;
    clickOk?.Invoke();
    clickOk = null;
  }

  /// <summary>
  ///   
  /// </summary>
  /// <param name="_text">  </param>
  /// <param name="_head">  </param>
  /// <param name="dialog">  </param>
  /// <param name="type">  </param>
  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;
  }

}
3.UiMessage 코드
Message 물체 에 추가 합 니 다.팝 업 상자 의 디 스 플레이 를 제어 하 는 데 사 용 됩 니 다.

using UnityEngine;
using UnityEngine.UI;

public class UiMessage : MonoBehaviour
{
  public Button ok;
  public Button cancel;
  public Button retry;
  /// <summary>
  ///   
  /// </summary>
  public GameObject panel;
  public Text headText;
  public Text text;
  /// <summary>
  ///    
  /// </summary>
  private GameObject messageBox;

  private void Awake()
  {
    messageBox = gameObject.transform.GetChild(1).gameObject;
    ok = messageBox.transform.Find("ok").GetComponent<Button>();
    cancel = messageBox.transform.Find("cancel").GetComponent<Button>();
    retry = messageBox.transform.Find("retry").GetComponent<Button>();
    panel = gameObject.transform.Find("panel").gameObject;
    text = messageBox.transform.Find("Text").GetComponent<Text>();
    headText = messageBox.transform.GetChild(0).Find("head").GetComponent<Text>();

    //        
    messageBox.transform.position = new Vector3(Screen.width / 2 - messageBox.GetComponent<RectTransform>().rect.width / 2,
        Screen.height / 2 + messageBox.GetComponent<RectTransform>().rect.height / 2, 0);
    init();
  }

  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<Text>().text = " ";
        cancel.transform.GetChild(0).GetComponent<Text>().text = " ";
        ok.gameObject.SetActive(true);
        cancel.gameObject.SetActive(true);
        retry.gameObject.SetActive(false);
        break;
      case DialogResult.YesNoCancel:
        ok.transform.GetChild(0).GetComponent<Text>().text = " ";
        cancel.transform.GetChild(0).GetComponent<Text>().text = " ";
        ok.gameObject.SetActive(true);
        cancel.gameObject.SetActive(true);
        retry.gameObject.SetActive(true);
        break;
    }
  }

  private void Update()
  {
    panel.SetActive(MessageBox.type);
    gameObject.SetActive(MessageBox.state);
  }
}
4.디 스 플레이 상자 의 호출
이 호출 은 이벤트 에 호출 을 등록 하면 단 추 를 스스로 설정 할 수 있 습 니 다.
필 자 는 프로젝트 중의 방식 으로 시범 을 보 였 다.구체 적 으로 는 설명 을 하지 않 는 다.호출 방식 이 이미 제시 되 었 습 니 다.
특히 주의:UiMessage 에서 Message Box 방법 을 호출 했 기 때문에 Message Box 데 이 터 를 초기 화해 야 합 니 다.사용 하 는 것 을 초기 화 합 니 다.필 자 는 ok,cancel 단 추 를 사 용 했 습 니 다.마지막 으로 팝 업 상 자 를 표시 합 니 다.

운행 결과

6.팝 업 상자 드래그 이동 가능
Message Box 물체 에 Drag Manage 를 추가 합 니 다.(ui 물 체 를 끌 어 당 기 려 면 Drag Manage 를 추가 하면 됩 니 다)
필 자 는 시연 을 하지 않 겠 습 니 다.

using UnityEngine;
using UnityEngine.EventSystems;

/// <summary>
///         
/// </summary>
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;
  }
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기