关于UniTask的一些笔记
Unity 的 UniTask 是一种用于异步编程的 C# 库,它扩展了 .NET 中的 Task 和 await/async 模式。1. 与传统的 Task 和 async/await 模式对比,UniTask 更加轻量级,因为它不需要像 Task 一样创建和打点线程池。
2. UniTask 具有更高的性能,因为它使用了更少的内存和 CPU 资源。
3. UniTask 还提供了更多的功能,如打消和超时等功能,这些功能在传统的 Task 中并不容易实现。
Unitask 的常见用法:
异步等待:使用 await 关键字,可以等待一个异步操作完成,这样就不需要手动措置回调或使用协程。
延迟执行:使用 UniTask.Delay 方式可以在指定的时间后执行一个操作,而不需要使用协程或计时器。
同步化操作:使用 UniTask.SwitchToMainThread 方式可以在主线程上执行一个操作,这对于访谒 Unity 的组件或 API 非常有用。
迭代器:使用 UniTask.ToCoroutine 方式可以将一个 UniTask 对象转换为 IEnumerator,从而可以在协程中使用。
任务链:使用 UniTask.WhenAll 或 UniTask.WhenAny 方式可以创建一个任务链,等待多个异步操作完成后执行下一步操作。
打消任务:使用 UniTaskCancellationToken 类可以打消异步操作,这对于长时间运行的操作非常有用。
UniTask的特点
1.UniTask是一种基于C#布局体的异步操作库,可以在Unity中使用,UniTask使用了自定义的AsyncMethodBuilder来实现零GC的方针,这使得所有Unity的异步操作和协程可以使用await语法。
3.unitask可以为 Unity 提供有效的无GC async/await集成。
4.UniTask 还提供了异步 LINQ、Channel 和 AsyncReactiveProperty 功能。
5.UniTask 提供了 TaskTracker(Task 追踪器)窗口,用于辅佐开发者在运行时监视和诊断 UniTask 的内存泄漏问题。
6.UniTask 提供了对 MonoBehaviour 动静事件和 uGUI 事件的 Await/AsyncEnumerable 撑持。
7.UniTask 与 .NET 尺度库中的 Task、ValueTask 和 IValueTaskSource 接口具有高度的行为兼容性。
unitask为什么可以为 Unity 提供有效的无GC async/await集成。
1.Unitask 基于 C# Task 进行开发
2.是因为Unitask 通过优化 Task 的创建和销毁过程,尽可能地减少了 Task 的 Allocation,从而减少了 GC 压力。
3.Unitask 提供了自定义的任务调剂器,通过调剂器的设置,可以控制任务的执行挨次、优先级和并发度等,从而更好地控制游戏的性能。
4.Unitask 针对 Unity 游戏开发场景进行了优化,比如撑持 Unity 主线程的同法式用、撑持 Unity 协程的嵌套和调用、撑持对 Unity 对象的操作和回收等。
• UniTask.OnAnimatorIKAsync(int layerIndex): 当 Animator 执行 IK 动画时调用。
• UniTask.OnAnimatorMoveAsync(): 当 Animator 更新物体的 transform 时调用。
• UniTask.OnApplicationFocusAsync(bool hasFocus): 当应用法式获得或掉去焦点时调用。
• UniTask.OnApplicationPauseAsync(bool pauseStatus): 当应用法式暂停或恢复时调用。
• UniTask.OnApplicationQuitAsync(): 当应用法式退出时调用。
• UniTask.OnAudioFilterReadAsync(float[] data, int channels): 当 AudioSource 读取音频数据时调用。
• UniTask.OnBecameInvisibleAsync(): 当该对象从相机视野中消掉时调用。
• UniTask.OnBecameVisibleAsync(): 当该对象进入相机视野时调用。
• UniTask.OnCollisionEnterAsync(Collision collision): 当该对象与另一个对象发生碰撞时调用。
• UniTask.OnCollisionExitAsync(Collision collision): 当该对象与另一个对象碰撞结束时调用。
• UniTask.OnCollisionStayAsync(Collision collision): 当该对象与另一个对象持续碰撞时调用。
• UniTask.OnControllerColliderHitAsync(ControllerColliderHit hit): 当该对象与控制器发生碰撞时调用。
• UniTask.OnDisableAsync(): 当对象被禁用时调用。
• UniTask.OnEnableAsync(): 当对象被启用时调用。
• UniTask.OnJointBreakAsync(float breakForce): 当该对象的关节断裂时调用。
页:
[1]