Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
torisoup
PDF, PPTX
15,417 views
UniTask入門
Unity++ 〜ショートセッション勉強会 presented by Unity部〜 https://meetup.unity3d.jp/jp/events/1112
Technology
◦
Read more
9
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 95
2
/ 95
Most read
3
/ 95
4
/ 95
5
/ 95
6
/ 95
Most read
7
/ 95
8
/ 95
9
/ 95
10
/ 95
11
/ 95
12
/ 95
13
/ 95
14
/ 95
15
/ 95
16
/ 95
Most read
17
/ 95
18
/ 95
19
/ 95
20
/ 95
21
/ 95
22
/ 95
23
/ 95
24
/ 95
25
/ 95
26
/ 95
27
/ 95
28
/ 95
29
/ 95
30
/ 95
31
/ 95
32
/ 95
33
/ 95
34
/ 95
35
/ 95
36
/ 95
37
/ 95
38
/ 95
39
/ 95
40
/ 95
41
/ 95
42
/ 95
43
/ 95
44
/ 95
45
/ 95
46
/ 95
47
/ 95
48
/ 95
49
/ 95
50
/ 95
51
/ 95
52
/ 95
53
/ 95
54
/ 95
55
/ 95
56
/ 95
57
/ 95
58
/ 95
59
/ 95
60
/ 95
61
/ 95
62
/ 95
63
/ 95
64
/ 95
65
/ 95
66
/ 95
67
/ 95
68
/ 95
69
/ 95
70
/ 95
71
/ 95
72
/ 95
73
/ 95
74
/ 95
75
/ 95
76
/ 95
77
/ 95
78
/ 95
79
/ 95
80
/ 95
81
/ 95
82
/ 95
83
/ 95
84
/ 95
85
/ 95
86
/ 95
87
/ 95
88
/ 95
89
/ 95
90
/ 95
91
/ 95
92
/ 95
93
/ 95
94
/ 95
95
/ 95
More Related Content
PDF
UniRx完全に理解した
by
torisoup
PDF
Observableで非同期処理
by
torisoup
PDF
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
PDF
ObserverパターンからはじめるUniRx
by
torisoup
PDF
インタフェース完全に理解した
by
torisoup
PDF
MagicOnion入門
by
torisoup
PDF
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
by
Unity Technologies Japan K.K.
PPTX
UniRxでMV(R)Pパターンをやってみた
by
torisoup
UniRx完全に理解した
by
torisoup
Observableで非同期処理
by
torisoup
Unity開発で使える設計の話+Zenjectの紹介
by
torisoup
ObserverパターンからはじめるUniRx
by
torisoup
インタフェース完全に理解した
by
torisoup
MagicOnion入門
by
torisoup
【Unite 2018 Tokyo】そろそろ楽がしたい!新アセットバンドルワークフロー&リソースマネージャー詳細解説
by
Unity Technologies Japan K.K.
UniRxでMV(R)Pパターンをやってみた
by
torisoup
What's hot
PPTX
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
by
UnityTechnologiesJapan002
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
by
Unity Technologies Japan K.K.
PDF
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
PDF
Doozy UI 使おうぜ! #unity_lt
by
torisoup
PDF
Unityでオニオンアーキテクチャ
by
torisoup
PPTX
猫でも分かるUMG
by
エピック・ゲームズ・ジャパン Epic Games Japan
PPTX
UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
60fpsアクションを実現する秘訣を伝授 基礎編
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
PDF
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
PDF
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
PPTX
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
PPTX
若輩エンジニアから見たUniRxを利用したゲーム開発
by
Hirohito Morinaga
PDF
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
by
Unity Technologies Japan K.K.
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PPTX
はじめてのUniRx
by
torisoup
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
by
DeNA
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
by
UnityTechnologiesJapan002
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2
by
エピック・ゲームズ・ジャパン Epic Games Japan
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
by
エピック・ゲームズ・ジャパン Epic Games Japan
【CEDEC2018】一歩先のUnityでのパフォーマンス/メモリ計測、デバッグ術
by
Unity Technologies Japan K.K.
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
by
UnityTechnologiesJapan002
Doozy UI 使おうぜ! #unity_lt
by
torisoup
Unityでオニオンアーキテクチャ
by
torisoup
猫でも分かるUMG
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4におけるLoadingとGCのProfilingと最適化手法
by
エピック・ゲームズ・ジャパン Epic Games Japan
60fpsアクションを実現する秘訣を伝授 基礎編
by
エピック・ゲームズ・ジャパン Epic Games Japan
UE4でマルチプレイヤーゲームを作ろう
by
エピック・ゲームズ・ジャパン Epic Games Japan
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
by
Unity Technologies Japan K.K.
Unityでパフォーマンスの良いUIを作る為のTips
by
Unity Technologies Japan K.K.
RPGにおけるイベント駆動型の設計と実装
by
Koji Morikawa
若輩エンジニアから見たUniRxを利用したゲーム開発
by
Hirohito Morinaga
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
by
Unity Technologies Japan K.K.
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
はじめてのUniRx
by
torisoup
Similar to UniTask入門
PPTX
未来のプログラミング技術をUnityで -UniRx-
by
torisoup
PDF
Deep Dive async/await in Unity with UniTask(UniRx.Async)
by
Yoshifumi Kawai
PDF
UniRx の1歩目
by
infinite_loop
PDF
脱UniRx&Croutineから始めるUniTask
by
Euglenaching
PDF
俺はUniRxで行く
by
Kakohiroyuki
PDF
UniRxでPUNを使いやすくする
by
torisoup
PPTX
UnityでもTaskが使いたい!~MinimumAsyncBridgeの紹介~
by
Shoichi Yasui
PDF
Weeyble async 181009_tukky
by
shotaueda3
PDF
UniRx - Reactive Extensions for Unity
by
Yoshifumi Kawai
PPTX
UniRx勉強会 reactive extensions inside(公開用)
by
wilfrem
PPTX
UniRxHandsOnVol1
by
Shoji Oshima
PDF
Unity講座資料1
by
Mattun
PDF
Async design with Unity3D
by
Kouji Hosoda
未来のプログラミング技術をUnityで -UniRx-
by
torisoup
Deep Dive async/await in Unity with UniTask(UniRx.Async)
by
Yoshifumi Kawai
UniRx の1歩目
by
infinite_loop
脱UniRx&Croutineから始めるUniTask
by
Euglenaching
俺はUniRxで行く
by
Kakohiroyuki
UniRxでPUNを使いやすくする
by
torisoup
UnityでもTaskが使いたい!~MinimumAsyncBridgeの紹介~
by
Shoichi Yasui
Weeyble async 181009_tukky
by
shotaueda3
UniRx - Reactive Extensions for Unity
by
Yoshifumi Kawai
UniRx勉強会 reactive extensions inside(公開用)
by
wilfrem
UniRxHandsOnVol1
by
Shoji Oshima
Unity講座資料1
by
Mattun
Async design with Unity3D
by
Kouji Hosoda
More from torisoup
PDF
【Unity】 Behavior TreeでAIを作る
by
torisoup
PDF
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
PDF
コールバックと戦う話
by
torisoup
PDF
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
by
torisoup
PDF
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
PDF
Unityでオンラインゲーム作った話
by
torisoup
PDF
UnityとNCMBでユーザ管理を実装してみた話
by
torisoup
PDF
アバター生放送支援アプリ「アバれぽ」
by
torisoup
PPTX
みくみくまうすについて&Unity で使えるコーディングノウハウ
by
torisoup
PDF
Photon Cloud ことはじめ
by
torisoup
PDF
Unity講習会(初級)
by
torisoup
PDF
Task vs Observable
by
torisoup
【Unity】 Behavior TreeでAIを作る
by
torisoup
MagicOnion~C#でゲームサーバを開発しよう~
by
torisoup
コールバックと戦う話
by
torisoup
Unityで作ったゲームをDLカードで配布してみた話 #roppongiunity
by
torisoup
ARでVRアバターを表示するシステムを構築しよう
by
torisoup
Unityでオンラインゲーム作った話
by
torisoup
UnityとNCMBでユーザ管理を実装してみた話
by
torisoup
アバター生放送支援アプリ「アバれぽ」
by
torisoup
みくみくまうすについて&Unity で使えるコーディングノウハウ
by
torisoup
Photon Cloud ことはじめ
by
torisoup
Unity講習会(初級)
by
torisoup
Task vs Observable
by
torisoup
Recently uploaded
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
by
PC Cluster Consortium
PDF
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
by
Toru Tamaki
PDF
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
by
Toru Tamaki
PDF
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
by
Toru Tamaki
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
by
PC Cluster Consortium
PDF
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
by
PC Cluster Consortium
PDF
AI開発の最前線を変えるニューラルネットワークプロセッサと、未来社会における応用可能性
by
Data Source
PPTX
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
by
Ryuji Egashira
PDF
ニューラルプロセッサによるAI処理の高速化と、未知の可能性を切り拓く未来の人工知能
by
Data Source
PPTX
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
by
Tetsuya Oi
PDF
膨大なデータ時代を制する鍵、セグメンテーションAIが切り拓く解析精度と効率の革新
by
Data Source
PCCC25(設立25年記念PCクラスタシンポジウム):コアマイクロシステムズ株式会社 テーマ 「AI HPC時代のトータルソリューションプロバイダ」
by
PC Cluster Consortium
論文紹介:DiffusionRet: Generative Text-Video Retrieval with Diffusion Model
by
Toru Tamaki
論文紹介:HiLoRA: Adaptive Hierarchical LoRA Routing for Training-Free Domain Gene...
by
Toru Tamaki
論文紹介:MotionMatcher: Cinematic Motion Customizationof Text-to-Video Diffusion ...
by
Toru Tamaki
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ2「『Slinky』 SlurmとクラウドのKuber...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):エヌビディア合同会社 テーマ1「NVIDIA 最新発表製品等のご案内」
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):Pacific Teck Japan テーマ3「『TrinityX』 AI時代のクラスターマネジメ...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ1「大規模AIの能力を最大限に活用するHPE Comp...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):富士通株式会社 テーマ1「HPC&AI: Accelerating material develo...
by
PC Cluster Consortium
PCCC25(設立25年記念PCクラスタシンポジウム):日本ヒューレット・パッカード合同会社 テーマ3「IT運用とデータサイエンティストを強力に支援するH...
by
PC Cluster Consortium
AI開発の最前線を変えるニューラルネットワークプロセッサと、未来社会における応用可能性
by
Data Source
ChatGPTのコネクタ開発から学ぶ、外部サービスをつなぐMCPサーバーの仕組み
by
Ryuji Egashira
ニューラルプロセッサによるAI処理の高速化と、未知の可能性を切り拓く未来の人工知能
by
Data Source
2025年11月24日情報ネットワーク法学会大井哲也発表「API利用のシステム情報」
by
Tetsuya Oi
膨大なデータ時代を制する鍵、セグメンテーションAIが切り拓く解析精度と効率の革新
by
Data Source
UniTask入門
1.
UniTask⼊⾨ 2019/07/20 とりすーぷ
2.
⾃⼰紹介 • とりすーぷ • @toRisouP •
バーチャルキャスト社 • Unityエンジニア • 最近はサーバ開発 • MagicOnion, k8s • Microsoft MVP 2018〜 • Developer Technology
3.
今回の内容「UniTask」 • UniTaskの概要 • UniTaskの使い⽅ •
機能紹介 • キャンセル管理について
4.
UniTaskの概要
5.
UniTaskとは •Unity向けasync/await拡張ライブラリ • Unityの標準機能ではない、⾃分で導⼊が必要な外部ライブラリ • 株式会社Cysharpさんが提供 •
主開発はneuecc⽒(UniRxの作者) • 前はUniRxの⼀部だったが、後に分離したライブラリ化された • その名残で名前空間が「UniRx.Async」のまま
6.
UniTaskでできること • 「async/awaitでなんでもできるようになる」 • コルーチンをasync/awaitに置き換え •
Unityイベント関数のawait • UnityEditor上でawait状況の可視化
7.
例:コルーチンの置き換え
8.
例:コルーチンの置き換え コルーチンから結果を取りだすためのデリゲート
9.
例:コルーチン -> UniTask
10.
例:コルーチン -> UniTask
11.
例:コルーチン -> UniTask 結果はそのままreturnすればOK 例外もthrowするだけ
12.
UniTaskを使うメリット • コルーチンを使う必要がなくなる • より使いやすいasync/awaitですべてを記述できる •
既存のTaskよりもハイパフォーマンス • Unityに最適化されたTask-likeな機構が使える • UniRxよりはわかりやすい • ⼿続き処理で書ける、は⼗分メリット
13.
導⼊⽅法 • GitHubからunitypackageをダウンロードしてインポート • https://github.com/Cysharp/UniTask/releases •
AssetStoreにはまだ公開されていない
14.
UniTaskが使える条件 • C# 7以降が使えるUnityであること •
Unity 2018.3 以降 • Unity 2018.2 以前はIncremental Compilerを導⼊していると使える
15.
UniTaskの機能紹介
16.
UniTaskが提供する機能 • UniTask型、UniTask<T>型 • UniTaskに付随するstaticメソッド群 •
Unity機能のAwaiter • UniTaskTracker
17.
UniTaskが提供する機能 • UniTask型、UniTask<T>型 • UniTaskに付随するstaticメソッド群 •
Unity機能のAwaiter • UniTaskTracker
18.
UniTask型/UniTask<T>型 UniTaskの機能紹介
19.
UniTask型/UniTask<T>型 • Unity⽤に最適化されたTask-likeオブジェクト • Task/Task<T>のUnity向け実装 •
Taskの基本機能はだいたい使える
20.
Task型 vs UniTask型 Task
UniTask 機能 Unityでは不要な機能が多い Unityで活⽤できる機能のみ オブジェクトサイズ ムダに⼤きい ⼩さい 実⾏コンテキスト管理 TaskScheduler & SynchronizationContext PlayerLoop 必要なC# version C# 5.0以上 C# 7.0以上 Task Tracker 無 Unity Editor上で利⽤可能
21.
UniTask型の作り⽅ 作り⽅は主に3パターン ・async/awaitの戻り値として使う ・UniTaskCompletionSourceから作る ・Observableから変換する
22.
UniTask型の作り⽅ 作り⽅は主に3パターン ・async/awaitの戻り値として使う ・UniTaskCompletionSourceから作る ・Observableから変換する
23.
例: async/awaitから作る • async/awaitの戻り値をUniTaskに書き換えるだけでOK •
これだけでTask型からUniTask型に変換される
24.
例: async/awaitから作る • ジェネリック版のときも同様 •
Task<T> を UniTask<T> に置き換えるだけ
25.
(補⾜) UniTaskVoid型 • UniTaskの機構に乗った
”async void” • 投げっぱなし(Fire-and-forget)の⾮同期処理として使う
26.
UniTask型の作り⽅ 作り⽅は主に3パターン ・async/awaitの戻り値として使う ・UniTaskCompletionSourceから作る ・Observableから変換する
27.
UniTaskCompletionSource • ⼿続き処理でUniTaskを⽣成するときに使う • UniRxのAsyncSubjectとだいたい同じ
28.
UniTaskCompletionSource
29.
UniTask型の作り⽅ 作り⽅は主に3パターン ・async/awaitの戻り値として使う ・UniTaskCompletionSourceから作る ・Observableから変換する
30.
Observableからの変換 • UniTaskとObservable(UniRx)は相互変換可能
31.
注意点1 • Observableが必ず完了する状態にすること • useFirstValue=true
でTake(1)と同等になる
32.
注意点2 • UniTask ->
Observable 時、 実⾏コンテキストは必ずメインスレッドになる
33.
UniTask/UniTask<T>型 まとめ • 使い勝⼿は標準Taskとほとんど同じ •
既存のasyncメソッドを機械的に置換して問題ない • Observableが絡む時だけちょっと注意が必要
34.
UniTaskが提供する機能 • UniTask型、UniTask<T>型 • UniTaskに付随するstaticメソッド群 •
Unity機能のAwaiter • UniTaskTracker
35.
Staticメソッド群 UniTaskの機能紹介
36.
UniTaskに付随するstaticメソッド群 • 特殊な挙動をするUniTaskを⽣成できるメソッド群 • FactoryMethod的なやつ •
ほとんどがawaitとの併⽤がメイン
37.
UniTask.Run • デリゲートをThreadPool上で実⾏する • Task.Runと挙動はおなじ •
await後はUnityメインスレッドに戻る(configureAwait = true の時)
38.
UniTask.Delay • 指定秒数後に完了するUniTaskを⽣成する • awaitすることで「⼀定時間待つ」ができる •
どのタイミングで時間計測するか選べる • デフォルトはUpdate()タイミングで計測
39.
UniTask.DelayFrame • 指定フレーム後に完了するUniTaskを⽣成する • awaitすることで「⼀定フレーム待つ」ができる •
どのタイミングで計測するか選べる • デフォルトはUpdate()タイミング
40.
UniTask.Yield() • 指定のタイミングで1フレーム待機する • 処理をメインスレッドに戻すことにも使える •
引数なしの場合はUpdateタイミングで1フレーム待機になる
41.
UniTask.Yield
42.
UniTask.SwitchToThreadPool • 実⾏コンテキストをThreadPoolに切り替える • awaitするとそれ以降がThreadPool上での処理になる •
似たものでSwitchToTaskPoolがあるが、こっちは⾮推奨
43.
UniTask.SwitchToThreadPool
44.
UniTask.SwitchToMainThread • 実⾏コンテキストをメインスレッドに切り替える • awaitするとそれ以降がメインスレッド上での処理になる •
UniTask.Yield(PlayerLoopTiming.Update)と微妙に挙動が異なる
45.
UniTask.WaitUntil / UniTask.WaitWhile •
条件を満たすまで/満たさなくなるまで待機する • コルーチンのWaitUntil/WaitWhileと同等 • どのPlayerLoopタイミングでチェックするかも指定できる
46.
UniTask.WaitUntil / UniTask.WaitWhile
47.
UniTask.WaitUntilValueChanged • 指定のオブジェクトのパラメータが変動するまで待機する • UniRxのObserveEveryValueChangedと同じ •
対象は弱参照で保持され、GCされるとawaitはキャンセルされる
48.
UniTask.WhenAll • 指定のUniTaskがすべて完了するまで待機する • UniTask<T>の型がすべて⼀致していなくてもOK
49.
UniTask.WhenAll
50.
UniTask.WhenAny • 複数のUniTaskのうちどれか1つが先に完了するまで待機する
51.
Staticメソッド群 まとめ • Unity向けに調整された機能が多くて便利 •
標準Taskとくらべて使いやすくなってたりもする • まだまだあるけど量が多いので省略
52.
UniTaskが提供する機能 • UniTask型、UniTask<T>型 • UniTaskに付随するstaticメソッド群 •
Unity機能のAwaiter • UniTaskTracker
53.
Awaiter UniTaskの機能紹介
54.
Awaiterって何 • オブジェクトのawaitに必要なヤツ • あるオブジェクトにGetAwaiter()メソッドが実装されており、 そこからAwaiterが取得できるならそのオブジェクトはawaitができる
55.
補⾜:GetAwaiter() • Awaiterを取得するためのメソッド • クラスメソッドだけでなく、拡張メソッドでもOK •
⾃前で実装すればなんでもawaitできるようになる awaitにカーソルを合わせて定義元を参照するとどのGetAwaiter()が呼ばれるかわかる
56.
UniTaskとAwaiter • UniTaskはUnityのあらゆるオブジェクトの Awaiterを提供してくれる
57.
UniTaskが提供するAwaiter • コルーチン • AsyncOperation •
uGUI Event • Unityコールバック • JobHandle • UnityEvent
58.
コルーチンのAwaiter • IEnumeratorをawaitするとコルーチンとして実⾏&待機する
59.
コルーチンのAwaiter
60.
(補⾜)コルーチン上でUniTask • ToCoroutine()でUniTaskをコルーチン化もできる
61.
AsyncOperationのAwaiter
62.
AsyncOperationのAwaiter • ConfigureAwaitで進⾏状況取得可能
63.
uGUI EventのAwaiter ※using UniRx.Async.Triggers
が必要
64.
UnityコールバックのAwaiter • MonoBehaviourに⾶んでくるイベントコールバックのこと ※using UniRx.Async.Triggers
が必要
65.
Awaiter まとめ • Unityのあらゆる要素がawait可能になる •
コルーチンの上位互換としてasync/awaitが利⽤可能になる
66.
UniTaskが提供する機能 • UniTask型、UniTask<T>型 • UniTaskに付随するstaticメソッド群 •
Unity機能のAwaiter • UniTaskTracker
67.
UniTaskTracker UniTaskの機能紹介
68.
UniTaskTracker • await中のUniTaskを可視化するEditor拡張 • Unity
Editorの [Window] -> [UniRx] -> [UniTask Tracker] • UniTaskがリークしていないか確認できる
69.
UniTaskとキャンセル
70.
⾮同期処理とキャンセル • ⾮同期処理はキャンセルを常に考慮しなくてはいけない • もろもろの理由で不要になった時に 実⾏中の処理を⽌めないといけない
71.
UniTaskとキャンセル • UniTaskを使う上でも当然キャンセルの実装が必要 • リソースの解放、適切なタイミングでの停⽌、漏れのない中断、 これらは⼈間が考えて実装する必要がある
72.
適切にキャンセルするために • CancellationToken • OperationCanceledException
73.
適切にキャンセルするために • CancellationToken • OperationCanceledException
74.
CancellationToken • ⾮同期処理にキャンセルを通知するためのC#標準機能 • 「キャンセル要求されたか?」のフラグを持つオブジェクト
75.
CancellationToken
76.
CancellationToken CanellationTokenSourceから⽣成
77.
CancellationToken if⽂で判定 if( IsCancellationRequested )
throw new OperationCanceledException(); の省略記法
78.
補⾜: GetCancellationTokenOnDestroy()
79.
UniTaskとCancellationToken • UniTaskはCancellationTokenを使ってキャンセル判定を⾏う • キャンセル要求がくるとUniTaskはキャンセル状態になる •
await中の場合はそこで処理が終了しawait以降は実⾏されない
80.
CancellationTokenは省略しない • 「めんどくさいからキャンセル処理を書かない」はNG
81.
Tokenが渡せない処理の場合のキャンセル • CancellationTokenの状態を⼿動で確認する • どのタイミングで処理を⽌めるのか、は⾃分で考える •
キャンセル時はOperationCanceledExceptionを発⾏すればOK
82.
⼿動でキャンセルチェックする例
83.
適切にキャンセルするために • CancellationToken • OperationCanceledException
84.
OperationCanceledException • UniTaskをキャンセル状態にするための特殊扱いな例外 • この例外が投げられるとUniTaskは「キャンセル状態」になる •
この例外はエラーログに出ない
85.
Throwするタイミング • キャンセル要求が外部からされた時にthrowする • 外から「処理を⽌めてね」って⾔われた時に投げる例外 •
⾃⼰判断で勝⼿に投げてよい例外ではない
86.
キャンセル要求 • キャンセル要求はCancellationTokenを通じて送られる • ThrowIfCancellationRequested()が便利
87.
キャンセルを上流まで伝播させる • この例外は上流まで“貫通”させる • try-catchを書くときはOperationCanceledExceptionだけ 素通りするようにしておく
88.
キャンセルを上流まで伝播させる • この例外は上流まで“貫通”させる • try-catchを書くときはOperationCanceledExceptionだけ 素通りするようにしておく
89.
悪⽤しない • キャンセル⽤途以外では利⽤しないこと • 本来の⽤途とは別の使い⽅をすると、そこから負債になる •
「処理に失敗したときにエラーログに出したくないから、 OperationCanceledException使っちゃおう」みたいなのはNG
91.
UniTaskとキャンセル まとめ • CancellationTokenは可能な限り指定する •
OperationCanceledExceptionは特殊なので扱いに注意
92.
最後のまとめ
93.
UniTask、結局何に使えばいいの? • 深く考えず使えそうなところでどんどん使おう • コルーチンの代替として使える •
他のコンポーネントが処理を終えるのを待つ、とかにも使える • むしろUniTaskが使えないことがストレスになるくらいには便利
94.
他の⾮同期処理との使い分けは? • async/awaitを使うなら、UniTaskをまず使う • 理由が無い限り標準Taskは使わない •
UniRx(Observable)は⽤途に応じて使う • Observableはイベント処理や、結果が複数になる⾮同期処理向け • Observableもawait可能だし、UniTaskとの相互変換もできる
95.
まとめ • UniTaskめっちゃ便利だから使おう!!!! • あと今回の話の補⾜的なのをUniBook11に書きました •
さらにUniRx+UniTask本、マダカイテルカラマッテネ…
Download