こんにちわ、Unityエンジニアのオオバです。

Unity初心者にとって
UniTask、Task、コルーチンと
非同期処理の選択肢に困るかも知れません。

オススメなのはUniTaskです。
UniTaskとは、Unity用にチューニングされたTaskです。

そもそもTaskとは、
C#が提供する非同期処理の機能なのですが、
Unityでは使いづらいです。

【超初心者向け】UniTaskの始め方と3つのポイント_0

本記事は初心者向けのため、
UniTaskは使いづらいTaskを
使いやすくしたものと考えておきましょう。

Unity開発では必須級なツールなので、
ぜひチャレンジしてもらいたいです。

本記事ではUnityへのインストールから、
かんたんな非同期処理の実装といった
初心者向けのUniTaskの始め方の解説です。

大事なポイントを3つに絞っています。

UniTaskは定義、通常呼び出し、WhenAllの3つだけでOK

UniTaskを使う上でまずこの3つを覚えておきましょう。

ソースコードで表現すると以下です。

// ① 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のインストール から
小さいコードを書きながら使い方 を解説していきます。

この記事の内容

UniTaskをPackageManagerでインストール

Window > Package Managerから
Package Managerを開きます。

【超初心者向け】UniTaskの始め方と3つのポイント_1

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

【超初心者向け】UniTaskの始め方と3つのポイント_2

https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
↑のURLを入力して Add ボタンをクリック。

するとダウンロードが実行され、
Unityへのインポート処理が走ります。
(しばらく待ちます)

【超初心者向け】UniTaskの始め方と3つのポイント_3

UniTaskがパッケージとして
Unityにインストールされました。

UniTaskのインストールはこれで完了です。

ポイント① : UniTaskの定義

UniTaskを実行する前に、
呼び出すタスクを作ります。

async UniTask 【メソッド名】 {  
    // タスクの処理を記述する  
}

↑UniTaskの文法です。

UniTaskの手前にasyncを記述します。
これでUniTaskの作成は完了です。

ここから実際にUniTaskを動かしていきます。

ポイント② : UniTaskを呼び出す

いきなり難しいコードを書いても理解できないですよね。

まずは最小単位のコードを書いて
UniTaskの挙動を確認していきます。

1秒後にログを出力するサンプル
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のメソッドです。

【超初心者向け】UniTaskの始め方と3つのポイント_4

このソースを実行すると
↑の通り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の始め方と3つのポイント_5

実行すると上のようにログが出力されます。

全UniTaskの完了を待機 していることが分かります。
コルーチンよりコード量少なくスッキリ書けます。

オオバ
オオバ
便利でしょ?

まとめ : UniTaskの始め方

記事の内容を簡単にまとめます。

こんな感じです。
UniTaskを使う上で
最低限覚えておいたほうがよい3点を紹介しました。

これでUniTaskを使い始めることは可能だと思います。
次のステップとして、アニメーションをUniTask化してみるのはいかがでしょうか?

アニメーションライブラリのDOTweenをUniTask化した記事を
こちらにまとめています。ぜひ読んでみてください。


フォローすると UIデザイナー力の上がるTwitter やってます!
今日から使えるテクニックを発信中。
ぜひフォローしてみてください!
👉フォローはこちら!

最後まで読んでいただきありがとうございました!
すばらしいUniTaskライフをお過ごしください。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境
参考サイト