Unity预加载:减少游戏中首次加载资源时的卡顿

遇到的问题,如标题所示,所以写了如下模块。

模块功能就是初始化时候,加载零散/文件夹的物体,代码如下:

cs 复制代码
 #region 启动预加载模块
 /// <summary> 预加载间隔(分帧防卡顿) </summary>
 private float _loadInterval = 0.03f;
 /// <summary> 加载进度文本 </summary>
 private Text _loadTxt;
 /// <summary> 当前加载进度 </summary>
 private int _currentLoadCount;
 /// <summary> 总需要加载的资源数量 </summary>
 private int _totalLoadCount;

 /// <summary> 启动预加载(入口函数,在Start/Awake中调用) </summary>
 public void StartPreload()
 {
     _loadTxt = transform.Find("loadTxt").GetComponent<Text>();
     _currentLoadCount = 0;

     // 初始化【单个预制体路径】列表
     List<string> preloadPaths = new List<string>();
     preloadPaths.Add($"KKK");
       

     // 初始化【文件夹路径】列表
     List<string> folderPaths = new List<string> {  };
     folderPaths.Add("Prefabs/XXX");

     // 统计总预加载数量
     _totalLoadCount = preloadPaths.Count;
     foreach (var folder in folderPaths)
     {
         var prefabs = Resources.LoadAll<GameObject>(folder);
         _totalLoadCount += prefabs.Length;
     }

     UpdateLoadText();
     // 串行执行:先加载单个路径,完成后再加载文件夹
     StartCoroutine(PreloadAllCoroutine(preloadPaths, folderPaths));
 }

 /// <summary> 统一预加载协程(串行:单个路径 → 文件夹) </summary>
 private IEnumerator PreloadAllCoroutine(List<string> preloadPaths, List<string> folderPaths)
 {
     Debug.Log($"=== 预加载启动 | 总资源数:{_totalLoadCount} ===");

     // 第一步:加载零散预制体路径
     yield return PreloadSinglePaths(preloadPaths);
     // 第二步:加载文件夹内所有预制体
     yield return PreloadFolders(folderPaths);

     // 全部加载完成
     _loadTxt.text = "资源加载完毕";
     Debug.Log("=== 所有资源预加载完成 ===");

     //进入游戏
 }

 /// <summary> 预加载:单个路径列表 </summary>
 private IEnumerator PreloadSinglePaths(List<string> paths)
 {
     foreach (string path in paths)
     {
         // 加载资源
         GameObject prefab = Resources.Load<GameObject>(path);
         // 实例化触发初始化
         GameObject obj = Instantiate(prefab);
         obj.SetActive(false);
         obj.hideFlags = HideFlags.HideAndDontSave;

         yield return null;
         Destroy(obj);

         // 更新进度
         _currentLoadCount++;
         UpdateLoadText();
         Debug.Log($"预加载成功:{path}");

         yield return new WaitForSeconds(_loadInterval);
     }
 }

 /// <summary> 预加载:多个文件夹 </summary>
 private IEnumerator PreloadFolders(List<string> folderPaths)
 {
     foreach (string folderPath in folderPaths)
     {
         // 加载文件夹下所有预制体
         GameObject[] prefabs = Resources.LoadAll<GameObject>(folderPath);
         foreach (GameObject prefab in prefabs)
         {
             bool loadSuccess = false;
             GameObject tempObj = null;

             // 实例化
             try
             {
                 tempObj = Instantiate(prefab);
                 tempObj.SetActive(false);
                 tempObj.hideFlags = HideFlags.HideAndDontSave;
                 loadSuccess = true;
             }
             catch (System.Exception e)
             {
                 Debug.LogError($"预加载失败 [{prefab.name}]:{e.Message}");
             }

             // 初始化+销毁
             if (loadSuccess)
             {
                 yield return null;
                 Destroy(tempObj);
                 Debug.Log($"预加载成功:{prefab.name}");
             }

             // 更新进度
             _currentLoadCount++;
             UpdateLoadText();
             yield return new WaitForSeconds(_loadInterval);
         }
     }
 }

 /// <summary> 更新加载进度文本 </summary>
 private void UpdateLoadText()
 {
     _loadTxt.text = $"资源加载进度  {_currentLoadCount}/{_totalLoadCount}";
 }
 #endregion

文件夹部分可以根据需求自行处理。

加载效果如下:

相关推荐
萌萌的提莫队长1 小时前
Unity相机捕捉,图像识别,抠像+合成
opencv·unity
hflmwl81 小时前
Wise Game Booster 游戏加速软件
游戏·wisegamebooster·游戏加速软件
律宏阔1 小时前
Windows 双网卡配置:通过跃点数实现网线访问局域网、Wi-Fi 访问公网
windows
Source.Liu2 小时前
【A11】拥有者模式平台架构笔记
windows·笔记·架构·rust
Solange__4 小时前
工业产线怎么用AI生成3D场景?从现场采集、部件重建到数字孪生交付的完整方案
人工智能·游戏·3d·ai·语言模型·自然语言处理·关卡设计
一次旅行5 小时前
2026.10.13 AI产业深度解读|硬件互联标准更新;Agent工程启示;开源社区AI政策转向;游戏与科研AI双线突破
人工智能·游戏·开源
可爱系程序猿5 小时前
Windows 11 下惠普 M126nw 驱动报错溯源:完整包、WSD 端口与类驱动记录
windows·程序人生·电脑
xiaolang_8616_wjl6 小时前
预告_c++游戏
游戏
技术不好的崎鸣同学6 小时前
第七章:模块踩踏以覆写导出函数绕过CFG
c++·windows·安全·系统安全
黄一一9112436 小时前
吾爱大佬开发,离线可用!PDF文件处理工具,本地网页版文件-浏览器里就能搞定,所有操作系统可用
windows·安全·阿里云·pdf·.net·开源软件