简书链接:【原创】unity简单封装实现一个进度加载和文本提示  文章字数:451,阅读全文大约需要1分钟 首先,加载中 显示加载动画和正在加载,
加载完成 隐藏,加载失败 则显示重新加载按钮和 加载失败的文字。
要解决自适应的问题 loading根的设置
在loadingview中的设置 文本本身需要加上content size filter约束,否则无法自适应
 实际效果  加载中
 加载失败
加载失败 设设置了个点击事件,这个点击事件对外公开,
1 2 3 4 5 public void onClickReadLoading() {     onClickReLoad?.Invoke(); } 
 
最后的实现原理就是旋转image,根据状态判断是否处于旋转中。 设置不同的状态 显示不同的gameobject.以及设置文本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class LoadingManager : Singleton<LoadingManager> {     // Start is called before the first frame update     [HideInInspector]     public float rotateSpeed = 300;     public Action onClickReLoad { get; set; }     public GameObject loadingImage;     public GameObject loadingBtnAndTextParent;     private Button btn;     TextMeshProUGUI mText;     public enum LoadingStatus     {         Loading, LoadingFail, LoadingSucc     }     LoadingStatus loadingStatus = LoadingStatus.Loading;     public void setState(LoadingStatus loadingStatus, String message = "正在加载")     {         this.loadingStatus = loadingStatus;         if (this.loadingStatus == LoadingStatus.LoadingSucc)         {             this.gameObject.SetActive(false);         }         else         {             this.loadingBtnAndTextParent.gameObject.SetActive(true);             this.gameObject.SetActive(true);             if (this.loadingStatus == LoadingStatus.LoadingFail)             {                 btn.gameObject.SetActive(true);                 this.loadingImage.SetActive(false);             }             else             {                 btn.gameObject.SetActive(false);                 this.loadingImage.SetActive(true);             }             mText.text = message;         }     }     void Start()     {         //被查找的button必须先设置显示,否则 这里找不到         btn = this.loadingBtnAndTextParent.GetComponentInChildren<Button>();         mText = this.loadingBtnAndTextParent.GetComponentInChildren<TextMeshProUGUI>();         setState(LoadingStatus.Loading);     }     public void onClickReadLoading()     {         onClickReLoad?.Invoke();     }     private void OnDestroy()     {         /*        if (btn != null)                 {                     btn.onClick.RemoveListener(onClickReadLoading);                 }*/     }     // Update is called once per frame     void Update()     {         if (this.loadingStatus == LoadingManager.LoadingStatus.Loading)         {             this.loadingImage.transform.Rotate(-Vector3.forward * rotateSpeed * Time.deltaTime);         }     } } 
 
实际逻辑