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;
        //处理逻辑
    }
  • 由于协程不会自动被关闭,所以即使销毁了这个页面时协程仍然会执行
  • 通常的处理方式是将协程存储下来,如果不需要再次加载,那么就直接将它销毁即可

猜你喜欢

转载自blog.csdn.net/KamikazePilot/article/details/128664441