本演示项目在Unity for Android Build中启用部分华为HMS和AGC服务,对应的类和函数的名称和用法相同。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

135 行
4.2 KiB

using System.Collections;
using System.Collections.Generic;
using HuaweiAuthDemo;
using TMPro;
using UnityEngine;
namespace HuaweiAuthDemo
{
public class PopupController : MonoBehaviour
{
public GameObject errorPopup;
public GameObject infoPopup;
CanvasGroup m_ErrorCanvas;
CanvasGroup m_InfoCanvas;
TextMeshProUGUI m_InfoText;
TextMeshProUGUI m_ErrorText;
public float timeBeforeHide = 2.0f;
public float fadeTime = .3f;
public float verticalTextMargin = 15.0f;
private float m_BasePopupHeight;
private bool m_IsShowingPopup = false;
private Coroutine m_ShowPopupCoroutine = null;
private void Awake()
{
m_BasePopupHeight = (transform as RectTransform).sizeDelta[1];
m_ErrorText = errorPopup.GetComponentInChildren<TextMeshProUGUI>();
m_ErrorText.text = "";
m_InfoText = infoPopup.GetComponentInChildren<TextMeshProUGUI>();
m_InfoText.text = "";
m_ErrorCanvas = errorPopup.GetComponent<CanvasGroup>();
m_ErrorCanvas.alpha = 0.0f;
m_InfoCanvas = infoPopup.GetComponent<CanvasGroup>();
m_InfoCanvas.alpha = 0.0f;
}
public void ShowInfo(string message)
{
if(m_InfoText != null)
{
StopShowingPopup();
m_InfoText.text = message;
m_ShowPopupCoroutine = StartCoroutine(ShowPopupCoroutine(m_InfoCanvas, m_InfoText));
}
}
public void ShowError(Error error)
{
if (m_ErrorText != null)
{
StopShowingPopup();
if (error.errorClass == ErrorClass.ActionCancelled)
{
return;
}
m_ErrorText.text = error.message ?? error.type;
m_ShowPopupCoroutine = StartCoroutine(ShowPopupCoroutine(m_ErrorCanvas, m_ErrorText));
}
}
private void StopShowingPopup()
{
if (m_IsShowingPopup)
{
StopCoroutine(m_ShowPopupCoroutine);
m_IsShowingPopup = false;
}
}
/// <summary>
/// Expand/Shrink the container if the text doesnt fit
/// </summary>
private void ResizeContainer(TextMeshProUGUI textMesh)
{
// This call ensures that the height of the text will be correct during this frame
RectTransform rectTransform = transform as RectTransform;
Vector2 rectSize = rectTransform.sizeDelta;
float textHeightWithMargin = textMesh.GetRenderedValues()[1] + verticalTextMargin * 2;
float newHeight = textHeightWithMargin <= m_BasePopupHeight ? m_BasePopupHeight : textHeightWithMargin;
rectTransform.sizeDelta = new Vector2(rectSize[0], newHeight);
}
IEnumerator ShowPopupCoroutine(CanvasGroup canvas, TextMeshProUGUI textMesh)
{
m_IsShowingPopup = true;
ResizeContainer(textMesh);
yield return FadeInCanvas(canvas);
yield return new WaitForSeconds(timeBeforeHide);
yield return FadeOutCanvas(canvas);
m_IsShowingPopup = false;
}
IEnumerator FadeInCanvas(CanvasGroup canvas)
{
yield return StartCoroutine(FadeCanvas(canvas,0.0f, 1.0f, fadeTime));
}
IEnumerator FadeOutCanvas(CanvasGroup canvas)
{
yield return StartCoroutine(FadeCanvas(canvas, 1.0f, 0.0f, fadeTime));
}
IEnumerator FadeCanvas(CanvasGroup canvas, float startAlpha, float endAlpha, float duration)
{
float startTime = Time.time;
float endTime = Time.time + duration;
float elapsedTime = 0f;
canvas.alpha = startAlpha;
while (Time.time < endTime)
{
elapsedTime = Time.time - startTime;
float percentage = 1 / (duration / elapsedTime);
canvas.alpha = startAlpha > endAlpha ? 1-percentage : percentage;
yield return new WaitForEndOfFrame();
}
canvas.alpha = endAlpha;
}
}
}