こんにちは、Unityエンジニアのオオバです。
Unity初心者にとって
UniTask、Task、コルーチンと
非同期処理の選択肢に困るかも知れません。
オススメなのはUniTask
です。
UniTaskとは、Unity用にチューニングされたTask
です。
そもそもTask
とは、
C#が提供する非同期処理の機能なのですが、
Unityでは使いづらいです。

本記事は初心者向けのため、
UniTask
は使いづらいTaskを
使いやすくしたものと考えておきましょう。
Unity開発では必須級なツールなので、
ぜひチャレンジしてもらいたいです。
本記事ではUnityへのインストールから、
かんたんな非同期処理の実装といった
初心者向けのUniTaskの始め方の解説です。
大事なポイントを3つに絞っているため理解しやすいと思います。
UniTaskは定義、通常呼び出し、WhenAllの3つだけでOK
UniTaskを使う上でまずこの3つを覚えておきましょう。
- ① : UniTaskの定義
- ② : UniTaskを呼び出す
- ③ : WhenAllで複数のUniTaskを呼び出す
ソースコードで表現すると以下です。
// ① UniTaskの定義
async UniTask TestTask(double sec = 1)
{
await UniTask.Delay(TimeSpan.FromSeconds(sec));
}
// ② : UniTaskを呼び出す
await TestTask();
// ③ : WhenAllで複数のUniTaskを呼び出す
await UniTask.WhenAll(
TestTask(1),
TestTask(2),
TestTask(3)
);
UniTaskは他にもたくさんの機能を提供していますが、
まず最初はこの3種類だけ覚えて慣れましょう。
ここからは UniTaskのインストール から
小さいコードを書きながら使い方 を解説していきます。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
UniTaskをPackageManagerでインストール
Window > Package Manager
から
Package Managerを開きます。

GitHhubからインストールするため、
Add package from git URL... をクリックします。

https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
↑のURLを入力して Add ボタンをクリック。
するとダウンロードが実行され、
Unityへのインポート処理が走ります。
(しばらく待ちます)

- ① : Packages:In Projectを選択
- ② : UniTaskがインストールされたことを確認
UniTaskがパッケージとして
Unityにインストールされました。
UniTaskのインストールはこれで完了です。
ポイント① : UniTaskの定義
UniTaskを実行する前に、
呼び出すタスクを作ります。
async UniTask 【メソッド名】 {
// タスクの処理を記述する
}
↑UniTaskの文法です。
UniTaskの手前にasync
を記述します。
これでUniTaskの作成は完了です。
ここから実際にUniTaskを動かしていきます。
ポイント② : UniTaskを呼び出す
いきなり難しいコードを書いても理解できないですよね。
まずは最小単位のコードを書いて
UniTaskの挙動を確認していきます。
using Cysharp.Threading.Tasks;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
async void Start()
{
Debug.Log("Start UniTask!");
await Wait1Sec();
Debug.Log("Hello World UniTask!");
}
// 1秒待機するUniTask
async UniTask Wait1Sec()
{
await UniTask.Delay(TimeSpan.FromSeconds(1));
}
}
UniTask.Delay
は指定した時間処理を待機する
UniTaskのメソッドです。

このソースを実行すると
↑の通り1秒後にログが出力されます。
重要なのはタスクの前にawait
を付けることです。
これでUniTaskを使った非同期処理を実装できます。
ポイント③ : WhenAllで複数のUniTaskを呼び出す
WhenAll
はめちゃくちゃ使います。
例えば画面を表示する前に、複数の画像を読み込ませたい場合、
すべての画像ロードを待機するといったことが簡単にできます。
先のソースコードを改良してWhenAllを実装しました。
3つのタスクを待機するサンプルです。
待機時間は1、2、3秒の3種類。
1秒待機するWait1Sec
メソッドを、
引数で指定した秒数待機する処理に変更しています。
ではソースコードを見ていきます。
public class WhenAllSample : MonoBehaviour
{
async void Start()
{
Debug.Log("Start UniTask!");
await UniTask.WhenAll(
WaitSec(1),
WaitSec(2),
WaitSec(3)
);
Debug.Log("Complete All UniTask!");
}
// 指定した秒数待機するタスク
async UniTask WaitSec(double sec)
{
await UniTask.Delay(TimeSpan.FromSeconds(sec));
Debug.Log($"Complete : {sec}秒待機したUniTask");
}
}

実行すると上のようにログが出力されます。
全UniTaskの完了を待機 していることが分かります。
コルーチンよりコード量少なくスッキリ書けます。
まとめ : UniTaskの始め方
記事の内容を簡単にまとめます。
- UniTaskはPackage Managerでインストール
- UniTaskの3つの覚えておくべきポイントの紹介
- ① : UniTaskの定義
- ② : UniTaskを呼び出す
- ③ : WhenAllで複数のUniTaskを呼び出す
こんな感じです。
UniTaskを使う上で
最低限覚えておいたほうがよい3点を紹介しました。
これでUniTaskを使い始めることは可能だと思います。
次のステップとして、アニメーションをUniTask化してみるのはいかがでしょうか?
アニメーションライブラリのDOTweenをUniTask化した記事を
こちらにまとめています。ぜひ読んでみてください。

この記事が気に入ったらフォローしよう
TikTokを始めました!!毎朝7時から自作ゲーム開発を配信しています。
ぜひフォローをお願いします!
最後まで読んでいただきありがとうございました!
すばらしいUniTaskライフをお過ごしください。
- Unity2020.3.19f1
- UniTask v2.2.5