当前位置: 首页 > news >正文

精品课程网站开发的创新点wordpress购物系统

精品课程网站开发的创新点,wordpress购物系统,手机制作手书app软件,国内网站建设公司文章目录 前言一、UniTask是什么#xff1f;二、使用步骤三、常用的UniTask API和示例1.编写异步方法2.处理异常3.延迟执行4.等待多个UniTask或者一个UniTas完成5.异步加载资源示例6.手动控制UniTask的完成状态7.UniTask.Lazy延迟任务的创建8.后台线程切换Unity主线程9.不要返… 文章目录 前言一、UniTask是什么二、使用步骤三、常用的UniTask API和示例1.编写异步方法2.处理异常3.延迟执行4.等待多个UniTask或者一个UniTas完成5.异步加载资源示例6.手动控制UniTask的完成状态7.UniTask.Lazy延迟任务的创建8.后台线程切换Unity主线程9.不要返回值10.缓存UniTask的结果11.指定异步操作阶段执行12.创建完成的UniTask13.UniTask.ToCoroutine转换协程14.异步迭代集合15. 异步判断16. uniTask的取消17.网络请求加载图片18.异步判断按钮是否被双击19.每次点击修改按钮不同的文本 四、 总结 前言 随着Unity游戏开发的流行异步编程变得越来越重要。UniTask是一个轻量级的异步编程库它为Unity开发者提供了更高效的编程方式。本文将介绍UniTask的基础内容和一些常用的API以及它们的使用示例。 一、UniTask是什么 UniTask是一个专为Unity设计的异步编程库它提供了类似于C#的Task和async/await的功能但是更加适合Unity的执行模型和生命周期。 二、使用步骤 UniTaskGit地址 UniTask中文文档地址 首先需要在Unity项目中安装UniTask。可以通过Unity Package ManagerUPM安装或者直接从GitHub下载源码 本文介绍从GitHub下载 三、常用的UniTask API和示例 1.编写异步方法 使用UniTask时可以像编写普通的异步方法一样使用async关键字和UniTask返回类型 // 示例一个简单的异步加载场景的方法 async UniTask LoadSceneAsync(string sceneName) {// 使用UniTask的场景加载方法await SceneManager.LoadSceneAsync(sceneName).ToUniTask();// 场景加载完成后的操作Debug.Log(Scene loaded); }2.处理异常 UniTask也支持异常处理可以使用try/catch块来捕获异步方法中的异常 // 示例带有异常处理的异步方法 async UniTask DoSomethingAsync() {try{// 可能会抛出异常的操作await SomeRiskyOperation().ToUniTask();}catch (Exception ex){// 处理异常Debug.LogError(ex.Message);} }3.延迟执行 UniTask.Delay: 延迟执行类似于Task.Delay。 // 延迟执行示例 async UniTask DelayedOperation() {await UniTask.Delay(TimeSpan.FromSeconds(5));Debug.Log(Operation executed after 5 seconds); } 4.等待多个UniTask或者一个UniTas完成 UniTask.WhenAll: 等待多个UniTask完成类似于Task.WhenAll。 // 并行执行多个任务示例 async UniTask RunMultipleTasks() {// 创建多个任务var task1 DoTask1Async();var task2 DoTask2Async();// 等待所有任务完成await UniTask.WhenAll(task1, task2);Debug.Log(全部任务完成); } async void RunSingleTask() {UniTask task1 UniTask.WaitUntil(() isClick1);UniTask task2 UniTask.WaitUntil(() isClick2);await UniTask.WhenAny(task1, task2);Debug.Log(一个任务完成); }5.异步加载资源示例 // 异步加载资源示例 async UniTaskTexture LoadTextureAsync(string url) {using (var request UnityWebRequestTexture.GetTexture(url)){await request.SendWebRequest().ToUniTask();if (request.isNetworkError || request.isHttpError){Debug.LogError(request.error);return null;}return DownloadHandlerTexture.GetContent(request);} }6.手动控制UniTask的完成状态 UniTaskCompletionSource允许你手动控制UniTask的完成状态。这在需要等待非异步方法完成的情况下非常有用。 UniTaskCompletionSourcebool ucs new UniTaskCompletionSourcebool();// 在某个事件发生时完成任务 void OnSomeEvent() {ucs.TrySetResult(true); }// 等待事件完成 async UniTask WaitSomeEventAsync() {await ucs.Task;Debug.Log(Event occurred); }7.UniTask.Lazy延迟任务的创建 UniTask.Lazy可以延迟任务的创建直到真正需要执行任务时才会创建。 // 示例延迟创建任务 UniTaskstring lazyTask UniTask.Lazy(async () {await UniTask.Delay(1000);return Result after delay; });// 在需要结果时等待任务 string result await lazyTask; Debug.Log(result);8.后台线程切换Unity主线程 在需要从后台线程切换回Unity主线程时可以使用UniTask.SwitchToMainThread。 // 示例在后台线程上执行操作然后切换回主线程 async UniTask DoOperationAndSwitchBack() {// 在后台线程上执行耗时操作await UniTask.Run(() SomeHeavyOperation());// 切换回主线程await UniTask.SwitchToMainThread();// 在主线程上执行Unity相关操作Debug.Log(Back on main thread); }9.不要返回值 当你不需要关心异步方法的返回值时可以使用UniTaskVoid。这对于触发事件或执行不需要返回结果的后台操作非常有用。 // 示例一个不返回任何结果的异步方法 async UniTaskVoid PerformBackgroundOperation() {// 执行一些后台操作await UniTask.Delay(1000);Debug.Log(Background operation completed); }10.缓存UniTask的结果 如果你想要缓存一个UniTask的结果以供后续使用可以使用UniTaskT.Preserve方法。 // 示例缓存异步操作的结果 UniTaskint originalTask CalculateValueAsync(); UniTaskint preservedTask originalTask.Preserve();// 在不同的地方使用缓存的结果 int result1 await preservedTask; int result2 await preservedTask;11.指定异步操作阶段执行 PlayerLoopTiming枚举允许你指定异步操作应该在Unity的哪个阶段执行。这可以帮助你更精确地控制代码的执行时间。 // 示例在FixedUpdate阶段执行异步操作 async UniTask PerformOperationInFixedUpdate() {await UniTask.Yield(PlayerLoopTiming.FixedUpdate);// 在FixedUpdate阶段执行的代码Debug.Log(This is executed in FixedUpdate); }12.创建完成的UniTask 当你已经有了结果并且想要创建一个已经完成的UniTask时可以使用UniTask.FromResult。 // 示例创建一个已经完成的UniTask UniTaskint completedTask UniTask.FromResult(42);13.UniTask.ToCoroutine转换协程 如果你需要将UniTask与旧的协程系统兼容可以使用UniTask.ToCoroutine将其转换为协程。 // 示例将UniTask转换为协程 IEnumerator MyCoroutine() {yield return LoadSceneAsync(MyScene).ToCoroutine(); }14.异步迭代集合 UniTask支持异步枚举器这允许你使用await foreach来异步迭代集合。 // 示例使用异步枚举器迭代集合 async UniTask ProcessItemsAsync(IAsyncEnumerableint items) {await foreach (var item in items){Debug.Log(item);} }15. 异步判断 UniTask.WaitUntil 和 UniTask.WaitWhile这些方法允许你等待直到某个条件为真或为假。 // 示例等待直到条件为真 async UniTask WaitUntilConditionMet() {await UniTask.WaitUntil(() someCondition);Debug.Log(Condition met); }// 示例等待直到条件为假 async UniTask WaitWhileConditionMet() {await UniTask.WaitWhile(() someCondition);Debug.Log(Condition no longer met); }16. uniTask的取消 通过 CancellationTokenSource完成UniTask的取消 public class Test : MonoBehaviour {private CancellationTokenSource cts;void Start(){cts new CancellationTokenSource();StartCount();cts.CancelAfter(TimeSpan.FromSeconds(10));}private async UniTaskint Count(int count, CancellationToken token){for (int i 0; i count; i){Debug.Log(i);await UniTask.Delay(TimeSpan.FromSeconds(1), cancellationToken: token);}return 0;}private async void StartCount(){try{await Count(100, cts.Token);}catch (OperationCanceledException){Debug.Log(计数取消);}} }17.网络请求加载图片 private async UniTaskVoid UnityTaskTest() {var webRequest UnityWebRequestTexture.GetTexture(url);var result await webRequest.SendWebRequest();var texture ((DownloadHandlerTexture)webRequest.downloadHandler).texture;Sprite sprite Sprite.Create(texture,new Rect(Vector2.zero, new Vector2(texture.width, texture.height)), new Vector2(0.5f, 0.5f));image2.sprite sprite;} 18.异步判断按钮是否被双击 using System; using System.Collections; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI;public class Test : MonoBehaviour {public Button btn1;void Start(){CheckClickInternal(this.GetCancellationTokenOnDestroy(), 1).Forget();}/// summary/// 异步判断按钮是否被双击/// /summary/// param nametoken/paramprivate async UniTaskVoid CheckClickInternal(CancellationToken token, float time){while (true){var firstClick btn1.OnClickAsync(token);await firstClick;var secondClick btn1.OnClickAsync(token);//判断第二次点击和等待time时间谁先执行,如果是secondClick返回0如果不是返回1int index await UniTask.WhenAny(secondClick,UniTask.Delay(TimeSpan.FromSeconds(time), cancellationToken: token));if (index 0){Debug.Log(被双击了);}}} }19.每次点击修改按钮不同的文本 using System.Collections; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks.Linq; using UnityEngine; using UnityEngine.UI;public class Test : MonoBehaviour {public Button btn1;// Start is called before the first frame updatevoid Start(){btn1.GetComponentInChildrenText().text 杀;ChangeBtnTextClick(this.GetCancellationTokenOnDestroy()).Forget();}/// summary/// 每次点击修改按钮不同的文本;/// /summary/// param nametoken/paramasync UniTask ChangeBtnTextClick(CancellationToken token){var click btn1.OnClickAsAsyncEnumerable();await click.Take(3).ForEachAsync((_, index) {if (token.IsCancellationRequested) return;btn1.GetComponentInChildrenText().text index switch{0 再杀,1 再补一刀,_ };}, cancellationToken: token);btn1.GetComponentInChildrenText().text 结束;} }四、 总结 Unitask 是一个优秀的异步任务库它简化了在 Unity 中处理异步操作的方式提高了开发效率和代码可维护性。通过本文的介绍可以更加深入地了解 Unitask 的使用方法并在自己的项目中应用它从而提升游戏开发的质量和效率。 在使用 Unitask 时需要注意以下几点 ​ 不要在 Update 方法中使用 async/await因为 Unity 主线程是单线程的使用异步方法可能导致性能问题。 ​ 尽量避免过多的异步嵌套以免导致代码复杂度过高。 ​ 使用 try/catch 来处理异步操作中的错误确保程序的稳定性。
http://www.hkea.cn/news/14327422/

相关文章:

  • 网站建设技术服务费记什么科目网站备案座机
  • 优秀平面设计作品网站德阳 网站建设
  • 南京市的网站是由那几家公司做的有的网站在浏览器打不开怎么办
  • 宠物网站模板下载如何加强企业网站建设 论文6
  • wordpress 首页调用最新文章成都seo学徒
  • 网站视频解析中国做外贸网站有哪些
  • 网站的子域名做视频网站利润如何
  • 网站开发过程模型跨境电商商城源码
  • 企业网站用织梦好吗沈阳建站模板系统包括
  • 水果销售网站模板在新西兰做兼职的网站
  • 人员调动在网站上怎么做网站开发私人培训
  • 网站做专业团队优化型网站是模板
  • 使用编辑字母做免费网站怎么自己办网站
  • 国开行网站毕业申请怎么做泸州网站建设公司
  • 服装网站建设可行性分析网络营销推广方法公司推荐
  • 网站建设必备的功能模块做期货到哪个网站看新闻
  • 营销型网站建设套餐深圳营销网站建设策划
  • 做视频背景音乐专用网站做五金建材市场的网站
  • 建网站网络推广优势吉林省干部网络培训
  • 巴马网站建设网站不备案可以用吗
  • 免费网站模板psd免费申请个人邮箱
  • 财政网站 建设方案新安县做网站
  • 网站主体注销唐山乾正建设工程材料检测公司网站
  • 怎么用记事本做钓鱼网站广州网站制作开发公司哪家好
  • 网站建设河南公司东莞常平网站设计
  • 一个服务器可以建多少个网站山东人才招聘信息网官网
  • muse做网站wordpress 极简杂志
  • wordpress用虚拟主机还是vps宁波seo推广服务电话
  • 做网站图注意事项专利申请
  • 学网站建设 去哪里工程承包合同协议书