LoginSignup
6
1

More than 1 year has passed since last update.

UniTaskの非同期処理やってみた

Last updated at Posted at 2022-10-09

UniTaskの非同期処理やってみた

こんにちは!!Asterです!!!
2022年9月23日-25日にかけてIwakenLabで熱海に温泉開発合宿を行いました!!
まず、支援者としてたくさんの方々から金銭面中心に支援をいただきました。本当にありがとうございました!!!

開発合宿の中でまつさこさんによるUniTask講座を開いていただきました。
その中で行ったことをまとめていきます。

目次

1. UniTaskのインストール
2. UniTaskなしVersion
2. UniTaskありVersion
2. UniTaskありVersion(変数あり)

1.UniTaskのインストール

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

映画 & テレビ 2022_10_09 22_13_18.png

Add package from git URL... をクリックします。

映画 & テレビ 2022_10_09 22_18_40.png

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

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

2.UniTaskでの時間処理

さて、ここからUniTaskを実際に触っていきましょう。
初めにやることとしては、いたって簡単です。
5秒経ったらTextを変更するだけです。

UniTaskを使わない場合

まず、UniTaskを使わずに5秒経ったらTextを変更してみましょう。
Scriptとしては

sample.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SampleScripts : MonoBehaviour
{
    
    float _time = 0;
    bool _flag = false;
    [SerializeField] private Text _text;
    
    void Update()
    {
        _time += Time.deltaTime;
        
        if(_time > 5 && !_flag)
        {
            Debug.Log("5 seconds");

            _text.text = "5 seconds";
            _flag = true;

        }
    }
}

次に、下記のようにSceneの中にTextを準備してください。
1. CreateEmptyでGameObjectを生成
2. その中にscriptを Add Componet
3. script内のTextを設定

UniTaskProject - SampleScene - PC, Mac & Linux Standalone - Unity 2020.3.40f1 Personal_ DX11 2022_10_09 21_34_51.png

これで準備完了です.
一度、これで確認してみましょう。

gif.gif

UniTaskを使わずに5秒経ったらTextを表示することはできました。
では、次にUniTaskを使って5秒経ったらTextを表示することをやってみましょう。

UniTaskを使う場合

scriptとしては、

UniTaskSampleScripts.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Cysharp.Threading.Tasks;

public class UniTaskSampleScripts : MonoBehaviour
{

    [SerializeField] private Text uniTaskText;

    async void Start()
    {
        await Wait();
        uniTaskText.text = "5 seconds";
        Debug.Log("5 seconds");
    }

    async UniTask Wait()
    {
        await UniTask.Delay(5000);
    }

}

scriptで大事なところとして、

    using Cysharp.Threading.Tasks;

これでUniTaskを呼び出すことができます。

    
    async UniTask Wait()
    {
        await UniTask.Delay(5000);
    }

5秒待つ処理を行う関数となります。

    
    async void Start()
    {
        await Wait();
    }

いつも通り関数を呼び出しを行いますが、
呼び出したい関数の前に await を書き忘れ内容にしましょう。
また、 Start()関数の前にもasyncを書きましょう。

これでscriptの準備が完了しました。

先ほどのUniTaskを使わないバージョンと同じようにTextとScriptを貼ったEmpty Objectを用意しましょう

UniTaskProject - SampleScene - PC, Mac & Linux Standalone - Unity 2020.3.40f1 Personal_ DX11 2022_10_09 23_03_51.png

さて、これで実行をしてみましょう。

gif(2).gif

UniTaskを使って5秒経ったらTextを表示することはできました。

少し応用も行いましょう。

UniTaskの関数内に変数を入れるバージョンです。

UniTaskを使う場合(変数あり)

scriptとして、

UniTaskSampleScripts.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Cysharp.Threading.Tasks;

public class UniTaskSampleScripts : MonoBehaviour
{

    [SerializeField] private Text uniTaskText;
    async void Start()
    {
        /*
        await Wait();
        uniTaskText.text = "5 seconds";
        Debug.Log("5 seconds");
        */


        var newText = await Wait("5 seconds");
        uniTaskText.text = newText;
        Debug.Log("5 seconds");

    }

    /*
    async UniTask Wait()
    {
        await UniTask.Delay(5000);
    }
    */


    async UniTask<string> Wait(string text)
    {
        await UniTask.Delay(5000);
        var newText = "It's been" + text;
        return newText;
    }

}

先ほどと変わった場所は、

    
    async UniTask<string> Wait(string text)
    {
        await UniTask.Delay(5000);
        var newText = "It's been" + text;
        return newText;
    }

関数を作るときに UniTaskとなっているところですね。

   async void Start()
    {
        var newText = await Wait("5 seconds");
        uniTaskText.text = newText;
        Debug.Log("5 seconds");
    }

今回も同様に関数を呼び出すときに await を忘れないように注意しましょう。

これで準備は完了しました。
実行してみましょう。

gif(1).gif

変数ありでも5秒経ったらTextを表示することはできました。

まとめ

今回は非常に簡単な部分のみを記事にしました。
UniTaskを使わない時と比べ、UpDateを使わなくて済む、より複雑なコードになったときにわかりやすくなるなと感じました。
今後もUniTaskについて学習し、記事にしていこうと思います。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1