UniTaskの導入

2 min read読了の目安(約1800字

この記事で得られること

・UniTaskとはなんぞや
・コルーチンからの変換
・その他動画で知ったC#の小技

以下の動画で学んだことをまとめています
「【勉強配信】UniTaskを勉強します。 メリット/デメリット おすすめの使い方あれば教えてください」

UniTaskとはなんぞや

・コルーチンの強化版(詳しいことは他の人が書いているので略)
・例えば戻り値が使える(関数を実行して数字や文字列を返す)

導入方法

・Unityのプロジェクトを開いてこちら からunitypackageをインポート

コルーチンからの変換

まずはコルーチン:2秒経ったらログを出すコード

HogeHoge.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HogeHoge : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(CorCor(2));
    }

    IEnumerator CorCor(float waitTime)
    {
        Debug.Log("CorCor初め");
        yield return new WaitForSeconds(waitTime);
        Debug.Log("CorCor終わり");
    }
}

続いてUniTask:2秒経ったらログを出せるし、戻り値も受け取れる

HogeHoge.cs
using System.Collections;
using System.Collections.Generic;
using Cysharp.Threading.Tasks; // これがいるよ
using UnityEngine;

public class HogeHoge : MonoBehaviour
{
    // async(えいしんく)をつける
    private async void Start()
    {
        // 待機処理はawait(あうぇいと)
        string studioName = await UniTaskWait(2);
        Debug.Log($"studioName: {studioName}");
    }
    // asyncをつける
    private async UniTask<string> UniTaskWait(float waitTime)
    {
        Debug.Log("UniTaskWait初め");
        // 待機処理はawait
        await UniTask.Delay((int)(waitTime * 1000));
        Debug.Log("UniTaskWait終わり");
        return "スタジオしまづ";
    }
}

UniTaskとは関係ないプログラミングの小技

  1. $をつけるとログを出すとき+を書かなくてても綺麗にかける
Debug.Log($"studioName: {studioName}");
  1. 配列やリストのログはJoinで一発表示できる
int[] a = new int[3] { 34, 54, 1 };
string log = string.Join(",", a);
Debug.Log(log);
// 34,54,1

動画で田村村長が教えてくれました!

参考文献

https://www.slideshare.net/torisoup/unitask-174974080
http://negi-lab.blog.jp/MoveByUniTask