您的位置:首页 > 教育 > 培训 > 全球招商网加盟网_ui培训讲师_新公司如何做推广_网络营销的四大要素

全球招商网加盟网_ui培训讲师_新公司如何做推广_网络营销的四大要素

2025/9/20 17:41:25 来源:https://blog.csdn.net/qq_42603590/article/details/145755971  浏览:    关键词:全球招商网加盟网_ui培训讲师_新公司如何做推广_网络营销的四大要素
全球招商网加盟网_ui培训讲师_新公司如何做推广_网络营销的四大要素

系列文章目录

unity知识点


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、协程的原理
  • 👉二、优化实现
    • 👉2-1、基础缓存方法
    • 👉2-2、高级缓存(按需缓存)
    • 👉2-3、减少协程的数量
    • 👉2-4、避免不必要的协程
  • 👉壁纸分享
  • 👉总结


👉前言

Unity 协程的优化方案主要围绕 减少垃圾回收(GC)开销 和 提高执行效率 两方面。
Unity协程的基础知识。协程在处理延迟或等待时非常有用,而WaitForSeconds是常用的等待指令。每次在协程中使用new WaitForSeconds(seconds)可能会导致内存分配,因为每次都会创建一个新的对象。尤其是在频繁调用的协程中,比如每帧执行的情况,这可能会引发GC(垃圾回收)的问题,进而影响性能。

博客将会介绍如何实现Unity优化协程。希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、协程的原理

Unity 的协程(Coroutine)是基于迭代器(IEnumerator)实现的。协程通过 yield return 暂停执行,并在下一帧或指定条件满足时恢复执行。

yield return 的作用
每次 yield return 都会返回一个对象(如 WaitForSeconds、WaitForEndOfFrame 等),Unity 会检查该对象的状态来决定何时恢复协程。

GC 开销的来源
每次 yield return new WaitForSeconds(1f) 都会创建一个新的 WaitForSeconds 对象,导致 GC 分配。频繁创建对象会增加垃圾回收的压力,尤其是在移动设备或性能敏感的场景中。

👉二、优化实现

👉2-1、基础缓存方法

缓存常用对象
将常用的 WaitForSeconds、WaitForEndOfFrame 等对象缓存到变量中,避免每次 yield return 时创建新对象。
优化前:

yield return new WaitForSeconds(1f); // 每次都会创建新对象

优化后:

public class CoroutineOptimization : MonoBehaviour
{// 缓存 WaitForSeconds 对象private WaitForSeconds _waitOneSecond = new WaitForSeconds(1f);private WaitForSeconds _waitHalfSecond = new WaitForSeconds(0.5f);private void Start(){StartCoroutine(OptimizedCoroutine());}private IEnumerator OptimizedCoroutine(){while (true){// 使用缓存的实例yield return _waitOneSecond;Debug.Log("1秒后执行");yield return _waitHalfSecond;Debug.Log("0.5秒后执行");}}
}

👉2-2、高级缓存(按需缓存)

如果项目中有多个不同时长的等待需求,可以使用字典(Dictionary)动态缓存 WaitForSeconds 实例。
代码如下:

using System.Collections.Generic;
using UnityEngine;public class WaitForSecondsCache : MonoBehaviour
{// 全局静态缓存字典private static Dictionary<float, WaitForSeconds> _waitCache = new Dictionary<float, WaitForSeconds>();// 按需获取或创建 WaitForSeconds 实例public static WaitForSeconds GetWait(float seconds){if (!_waitCache.TryGetValue(seconds, out var wait)){wait = new WaitForSeconds(seconds);_waitCache.Add(seconds, wait);}return wait;}private void Start(){StartCoroutine(CachedCoroutine());}private IEnumerator CachedCoroutine(){while (true){// 通过缓存获取实例yield return GetWait(2f);Debug.Log("2秒后执行");}}
}

👉2-3、减少协程的数量

如果场景中有大量协程运行,可以考虑合并协程逻辑,减少协程数量。例如,将多个物体的更新逻辑合并到一个协程中。
代码如下:

public class ObjectManager : MonoBehaviour
{public List<GameObject> objects = new List<GameObject>();private void Start(){StartCoroutine(UpdateAllObjects());}private IEnumerator UpdateAllObjects(){while (true){foreach (var obj in objects){// 统一处理所有物体的逻辑obj.transform.Translate(Vector3.forward * Time.deltaTime);}yield return null; // 一帧处理所有物体}}
}

👉2-4、避免不必要的协程

程虽然方便,但并不是所有场景都需要使用协程。对于简单的延迟操作,可以使用 Invoke 或 Update 结合计时器实现。
代码如下:

void Start()
{Invoke("DoSomething", 1f); // 1秒后执行
}void DoSomething()
{Debug.Log("1秒后执行");
}

请添加图片描述

👉壁纸分享

请添加图片描述

👉总结

本次总结的就是unity实现协程的优化方案, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com