网站空间管理地址,网站建哪家好,怎么获取免费的网站域名,上海做家纺的公司网站知识点一#xff1a;Resources异步加载是什么#xff1f;
在Unity中#xff0c;资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行#xff0c;如果加载的资源过大#xff0c;可能会导致程序卡顿#xff0c;因为从硬盘读取数据到内存并进行处理…知识点一Resources异步加载是什么
在Unity中资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行如果加载的资源过大可能会导致程序卡顿因为从硬盘读取数据到内存并进行处理是需要时间的。而异步加载则是Unity内部新开一个线程进行资源加载这样就不会造成主线程卡顿从而提高应用的响应性和流畅性。
知识点二Resources异步加载方法
1. 通过异步加载中的完成事件监听使用加载的资源
方法使用Resources.LoadAsyncT()方法进行异步加载并通过监听completed事件来获取加载完成的通知。示例 ResourceRequest rq Resources.LoadAsyncTexture(Tex/TestJPG);rq.completed LoadOver; // 注册完成事件注意异步加载不能马上得到加载的资源至少要等一帧。因此在completed事件触发之前尝试访问rq.asset是错误的。
2. 通过协程使用加载的资源
方法在协程中使用Resources.LoadAsyncT()方法并通过yield return语句等待资源加载完成。示例 IEnumerator Load(){ResourceRequest rq Resources.LoadAsyncTexture(Tex/TestJPG);yield return rq; // 等待资源加载完成tex rq.asset as Texture; // 获取加载的资源}优点协程允许在加载资源的同时处理其他逻辑如更新进度条或同时加载多个资源。缺点写法相对复杂一些。
代码讲解
1.通过完成事件监听使用加载的资源线程方式 private Texture tex; // 声明一个Texture变量用于存储加载的资源 void Start(){// 使用Resources.LoadAsyncT()方法进行异步加载ResourceRequest rq Resources.LoadAsyncTexture(bk);// 注册完成事件当加载结束时调用LoadOver方法rq.completed LoadOver;print(Time.frameCount);}// 完成事件的回调函数private void LoadOver(AsyncOperation operation){// 获取加载的资源tex (operation as ResourceRequest).asset as Texture;// 输出加载完成的通知和当前帧数print(加载结束);print(Time.frameCount);}private void OnGUI(){// 在GUI中绘制加载的纹理if (tex ! null)GUI.DrawTexture(new Rect(0, 0, 100, 100), tex);} 2.通过协程使用加载的资源协程方式
private Texture tex; // 声明一个Texture变量用于存储加载的资源void Start(){// 使用协程进行异步加载StartCoroutine(Load());}IEnumerator Load(){// 使用Resources.LoadAsyncT()方法进行异步加载ResourceRequest rq Resources.LoadAsyncTexture(bk);// 输出当前帧数以观察异步加载的效果print(Time.frameCount);// 等待资源加载完成yield return rq;// 输出加载完成的通知和当前帧数print(Time.frameCount);// 获取加载的资源tex rq.asset as Texture;// 这里可以添加额外的逻辑如更新UI或处理加载后的资源}private void OnGUI(){// 在GUI中绘制加载的纹理if (tex ! null)GUI.DrawTexture(new Rect(0, 0, 100, 100), tex);}
结果 总结
异步加载通过新开线程进行资源加载避免主线程卡顿。完成事件监听写法简单但只能在资源加载结束后进行处理。协程异步加载允许在加载资源的同时处理其他逻辑写法相对复杂。注意异步加载不能马上得到加载的资源需要等待加载完成。