¡¡¥³¥ë¡¼¥Á¥ó¤Ï 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¤Ï¡¢ÈóƱ´ü½èÍý¤ò´Êñ¤ËÆɤ߽ñ¤¤Ç¤¤ë¶¯ÎϤʥġ¼¥ë¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£