Unity 如何使用协程等待加载完成

前言

  • 今天在项目打包后遇到一个bug
  • 项目在电脑上跑没问题,但是在手机端时,由于手机较差的性能,导致异步加载的资源需要等待较长的时间.
  • 而我在一个地方本以为是同步加载的资源,但是在调用时发现本该被加载完成的资源加载失败,
  • 大佬查看过底层实现后给出结论:这个资源使用了异步的加载方式,这就导致了我后面的访问越界.
  • 我的解决办法是通过开启协程,等待资源加载完毕

不太了解协程的同学可以点击这里: 协程简介和常用方法

主要逻辑

  • 资源加载未完成时,后面的逻辑可以使用协程来进行等待
  • 比如我这里异步创建5个对象
	for (int i = 0; i < 5; i++)
	{
	    // 异步创建对象5个
	}
  • 那么在这段循环之后的代码,都需要考虑被创建的5个对象是否会被调用
  • 如果需要被调用,则开启协程等待
	异步加载方法 (string name , Action<GameObject> action)
	{
		//...
	}
	Coroutine cor = null;
	void func()
	{
		List<GameObject> list = new List<GameObject>();
		for (int i = 0; i < 5; ++i)
	    {
	       异步加载方法 (str , (gO) =>
	       {
	           list.Add(gO);
	       });
	    }	
	    //开启协程等待
	    cor = StartCoroutine(SendData(list));
	}
    IEnumerator SendData(List<GameObject> list)
    {
    	//等待list的元素个数达到5个
        while (list.Count != 5) yield return null;
        //处理逻辑
    }
  • 由于协程不会自动被关闭,所以即使销毁了这个页面时协程仍然会执行
  • 通常的处理方式是将协程存储下来,如果不需要再次加载,那么就直接将它销毁即可
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KamikazePilot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值