i-school - ¥³¥ë¡¼¥Á¥ó¤ÈUniTask¤ÎÈæ³Ó³Ø½¬­¢

ÂÔµ¡¸å¤Î½èÍý¤Î¥±¡¼¥¹¥¹¥¿¥Ç¥£

£±¡¥¥Ç¥ê¥²¡¼¥È¤ÎÃÖ¤­´¹¤¨


¡¡¥³¥ë¡¼¥Á¥ó¤Ï Action ·¿¤Î¥Ç¥ê¥²¡¼¥È¤òµ­½Ò¤Ç¤­¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢ÂÔµ¡¸å¤Ë»ØÄꤷ¤¿½èÍý¤ò¹Ô¤¦¤È¤¤¤¦½ñ¼°¤¬½ñ¤±¤Þ¤¹¡£

¡¡¤³¤Á¤é¤ò¥Ù¡¼¥¹¤È¤·¤Æ¡¢UniTask ¤ËÃÖ¤­´¹¤¨¤Æ½ñ¤¤¤Æ¤¤¤¯ÊýË¡¤ò³Ø½¬¤·¤Þ¤¹¡£



¡¡¥³¥ë¡¼¥Á¥ó¤Ï1ÉôÖÂÔµ¡¤·¡¢¤½¤Î¸å¤Ë»ØÄꤵ¤ì¤¿¥¢¥¯¥·¥ç¥ó¤ò¼Â¹Ô¤·¤Þ¤¹¡£

using System;
using System.Collections;
using UnityEngine;

public class CoroutineExample : MonoBehaviour
{
    private void Start()
    {
        transform.position = Vector3.one;

        StartCoroutine(DelayCoroutine(1, () => Debug.Log(transform.position)));
    }

    private IEnumerator DelayCoroutine(float delaySeconds, Action action)
    {
        yield return new WaitForSeconds(delaySeconds);

        action?.Invoke();
    }
}

¡¡¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¡¢¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤òÄɲäǤ­¤Þ¤¹



¡¡¤½¤ì¤Ç¤Ï¡¢¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤ò UniTask ¤ËÃÖ¤­´¹¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£


using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskExample : MonoBehaviour
{
    private async void Start()
    {
        transform.position = Vector3.one;

        await UniTask.Delay(1000);
        
        Debug.Log(transform.position);
    }
}

¡¡UniTask ¤ÏÂÔµ¡Á°Äó¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢
¥Ç¥ê¥²¡¼¥È¤òÍøÍѤ»¤º¤È¤âƱ´ü½èÍý¤òµ­½Ò¤¹¤ë¤è¤¦¤Ê´¶³Ð¤Ç½ñ¤¤¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¤Þ¤¿¡¢ÂÔµ¡½èÍýÍѤΥ᥽¥Ã¥É¤â¤Ê¤¯¤Ê¤ê¤Þ¤·¤¿¤Î¤Ç¡¢½èÍý¼«ÂΤ¬¤¹¤Ã¤­¤ê¤È¤·¤Þ¤·¤¿¡£



¡¡¥³¥ë¡¼¥Á¥ó¤ÈUniTask¤Ï¡¢¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤Î¼Â¹ÔÊýË¡¤¬°Û¤Ê¤ê¤Þ¤¹¡£

¡¡¥³¥ë¡¼¥Á¥ó¤Ç¤Ï¡¢StartCoroutine¤ÎÂè2°ú¿ô¤ËAction¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤òľÀÜ¥³¥ë¡¼¥Á¥óÆâ¤Ç¼Â¹Ô¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤ÏÈó¾ï¤ËÊØÍø¤Ç¤¹¤Í¡£

¡¡°ìÊý¡¢UniTask¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢Ä̾ï¤Ïawait¤Î²¼¤Ë½èÍý¤òµ­½Ò¤·¡¢ÈóƱ´ü½èÍý¤¬´°Î»¤¹¤ë¤È¤½¤ì¤Ë³¤¯½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
UniTask¤ÎÍøÅÀ¤Ï¡¢ÈóƱ´ü½èÍý¤Îľ´¶Åª¤Êµ­½Ò¤È¡¢¥³¡¼¥É¤ÎľÎ󲽤ËÂФ¹¤ë¥µ¥Ý¡¼¥È¤Ç¤¹¡£

¡¡UniTask¤Ï¡¢Ê£»¨¤ÊÈóƱ´ü¥³¡¼¥É¤ò´ÉÍý¤·¤ä¤¹¤¯¤·¡¢ÈóƱ´ü¥×¥í¥°¥é¥ß¥ó¥°¤ò¤è¤ê¥·¥ó¥×¥ë¤Ë¤·¤Þ¤¹¡£
¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤ò¼Â¹Ô¤¹¤ë¾ì¹ç¤Ï¡¢await¤Î²¼¤Ë¥³¡¼¥É¤òµ­½Ò¤¹¤ëÊýË¡¤¬°ìÈÌŪ¤Ç¤¹¡£

¡¡½èÍý¤òÈæ³Ó¤¹¤ë¤È¤ï¤«¤ê¤ä¤¹¤¤¤Ç¤¹¤¬¡¢UniTask¤Ï¡¢ÈóƱ´ü½èÍý¤ò´Êñ¤ËÆɤ߽ñ¤­¤Ç¤­¤ë¶¯ÎϤʥġ¼¥ë¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£


£²¡¥Æ¿Ì¾¥á¥½¥Ã¥É¤òÍøÍѤ·¤¿¥±¡¼¥¹¤ÎÃÖ¤­´¹¤¨


¡¡¥é¥à¥À¼°¤âÍøÍѤǤ­¤Þ¤¹¤Î¤Ç¡¢Æ¿Ì¾¥á¥½¥Ã¥É¤òºîÀ®¤·¤Æ½èÍý¤òµ­½Ò¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£
¡¡
using System;
using System.Collections;
using UnityEngine;

public class CoroutineCallbackExample : MonoBehaviour
{
    private void Start()
    {
        // 3Éøå¤Ë½èÍý¤ò¼Â¹Ô
        StartCoroutine(DelayMethod(3.0f, () =>
        {
            Debug.Log("3Éøå¤Ë¼Â¹Ô¤µ¤ì¤¿½èÍý");

            // ¤³¤³¤ÇºÂɸ¤ò°ÜÆ°¤¹¤ë¤Ê¤É¤ÎÄɲäνèÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹
¡¡¡¡¡¡¡¡¡¡¡¡transform.position = Vector3.one;

        }));
    }

    private IEnumerator DelayMethod(float delaySeconds, Action action)
    {
        yield return new WaitForSeconds(delaySeconds);

        action?.Invoke();
    }
}



using System;
using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskCallbackExample1 : MonoBehaviour
{
    private async void Start()
    {
        // 3Éøå¤Ë½èÍý¤ò¼Â¹Ô
        await DelayAsync(3.0f, () =>
        {
            Debug.Log("3Éøå¤Ë¼Â¹Ô¤µ¤ì¤¿½èÍý");

            // ¤³¤³¤ÇºÂɸ¤ò°ÜÆ°¤¹¤ë¤Ê¤É¤ÎÄɲäνèÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹
            transform.position = Vector3.one;
        });
    }

    private async UniTaskVoid DelayAsync(float delaySeconds, Action action)
    {
        await UniTask.Delay(TimeSpan.FromSeconds(delaySeconds));

        action?.Invoke();
    }
}




¡¡¤µ¤é¤Ë´Ê·é¤Ëµ­½Ò²Äǽ¤Ç¤¹¡£

using System;
using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskCallbackExample2 : MonoBehaviour
{
¡¡¡¡private async void Start()
    {
        // 3Éøå¤Ë½èÍý¤ò¼Â¹Ô
        await UniTask.Delay(TimeSpan.FromSeconds(3.0f));

        Debug.Log("3Éøå¤Ë¼Â¹Ô¤µ¤ì¤¿½èÍý");

        // ¤³¤³¤ÇºÂɸ¤ò°ÜÆ°¤¹¤ë¤Ê¤É¤ÎÄɲäνèÍý¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹
        transform.position = Vector3.one;

    }
}

¡¡¤³¤ÎÊýË¡¤ò»ÈÍѤ¹¤ë¤È¡¢ÈóƱ´ü½èÍý¤òľÀÜ¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥éÆâ¤Ç°·¤¦¤³¤È¤¬¤Ç¤­¡¢¥³¡¼¥É¤¬¤è¤êÌÀÎƤˤʤê¤Þ¤¹¡£

¡¡UniTask¤ò²ð¤·¤ÆÈóƱ´ü½èÍý¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î¿·¤·¤¤¥á¥½¥Ã¥É¤òºîÀ®¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£