Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

ÈóƱ´ü½èÍý¤È¤Ï


¡¡ÈóƱ´ü½èÍý¤Ï¡¢¥×¥í¥°¥é¥à¤¬Ê£¿ô¤Î¥¿¥¹¥¯¤òÊÂÎó¤Ë½èÍý¤¹¤ë¼êË¡¤Î°ì¤Ä¤Ç¤¹¡£
Î㤨¤Ð¡¢½Å¤¤½èÍý¤ò¹Ô¤¦¥¿¥¹¥¯¤òÊ̤Υ¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤·¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ï¥æ¡¼¥¶¡¼¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¹¹¿·¤Ê¤É¤ËÀìÇ°¤¹¤ë¤È¤¤¤Ã¤¿»È¤¤Êý¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥×¥í¥°¥é¥à¤Î±þÅúÀ­¤òÊݤÁ¤Ä¤Ä¡¢¸úΨŪ¤ËÊ£¿ô¤Î¥¿¥¹¥¯¤ò¿Ê¹Ô¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


¥³¥ë¡¼¥Á¥ó


¡¡Unity¤Ç¤Ï¡¢ÈóƱ´ü½èÍý¤Î°ì¤Ä¤È¤·¤Æ¥³¥ë¡¼¥Á¥ó¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¥³¥ë¡¼¥Á¥ó¤Ï¡¢ÆÃÄê¤Î»þ´Ö¤À¤±½èÍý¤òÃæÃǤ·¤¿¤ê¡¢ÆÃÄê¤Î¾ò·ï¤¬Ëþ¤¿¤µ¤ì¤ë¤Þ¤ÇÂÔµ¡¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡¼¡¤Î¥µ¥ó¥×¥ë¤Ï¡¢¥³¥ë¡¼¥Á¥ó¤òÍѤ¤¤Æ1ÉÃÂÔµ¡¤¹¤ë½èÍý¤Ç¤¹¡£

using System.Collections;
using UnityEngine;

public class CoroutineExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(WaitAndPrint());
    }

    private IEnumerator WaitAndPrint()
    {
        yield return new WaitForSeconds(1);
        Debug.Log("Hello after 1 second!");
    }
}


UniTask¤È¤Ï


¡¡UniTask¤Ï¡¢Unity¸þ¤±¤ÎÈóƱ´ü½èÍý¥é¥¤¥Ö¥é¥ê¤Ç¡¢Unity¤Î¥³¥ë¡¼¥Á¥ó¤ò¤è¤ê¸úΨŪ¤«¤ÄÊØÍø¤Ë»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
Æäˡ¢async/await¥Ñ¥¿¡¼¥ó¤ò³èÍѤ¹¤ë¤³¤È¤Ç¡¢ÈóƱ´ü¤Î¥í¥¸¥Ã¥¯¤òľ´¶Åª¤Ëµ­½Ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


UniTask¤ò»È¤Ã¤¿¥³¥ë¡¼¥Á¥ó½èÍý¤ÎÃÖ¤­´¹¤¨


¡¡°Ê²¼¤Ï¡¢UniTask¤ò»È¤Ã¤¿´ðËÜŪ¤ÊÈóƱ´ü½èÍý¤ÎÎã¤Ç¤¹¡£

¡¡¤¿¤À¤·¡¢¤¤¤­¤Ê¤ê UniTask ¤È¸À¤ï¤ì¤Æ¤âº®Í𤷤ޤ¹¤Î¤Ç¡¢¤Þ¤º¤Ï¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤òºîÀ®¤·¡¢
¤½¤Á¤é¤ÈƱ¤¸½èÍý¤Ë¤Ê¤ë·Á¤Ç UniTask ¤ËÃÖ¤­´¹¤¨¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£



¡ã¥³¥ë¡¼¥Á¥ó¤Î¾ì¹ç¡ä
using System.Collections;
using UnityEngine;

public class CoroutineExample : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(Process1());
    }

    private IEnumerator Process1()
    {
        yield return new WaitForSeconds(1f);
        Debug.Log("Process1 finished!");
        StartCoroutine(Process2());
    }

    private IEnumerator Process2()
    {
        yield return new WaitUntil(() => Input.GetButtonDown("Fire1"));
        Debug.Log("Process2 finished!");
        StartCoroutine(Process3());
    }

    private IEnumerator Process3()
    {
        yield return new WaitForSeconds(1f);
        Debug.Log("Process3 finished!");
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢Start¥á¥½¥Ã¥É¤ÇProcess1¥³¥ë¡¼¥Á¥ó¤ò³«»Ï¤·¤Þ¤¹¡£
¤½¤Î¥³¥ë¡¼¥Á¥ó¤¬´°Î»¤·¤¿¤éProcess2¥³¥ë¡¼¥Á¥ó¤ò³«»Ï¤·¡¢¤µ¤é¤Ë¤½¤Î´°Î»¸å¤ËProcess3¥³¥ë¡¼¥Á¥ó¤ò³«»Ï¤·¤Þ¤¹¡£



¡ãUniTask ¤Î¾ì¹ç¡ä


¡¡¾åµ­¤Î¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤òƱ¤¸ÆâÍÆ¤Ç UniTask ¤ÇÃÖ¤­´¹¤¨¤¿¾ì¹ç¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤Ç¤¹¡£

using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskExample : MonoBehaviour
{
    private async void Start()
    {
        await Process1();
        await Process2();
        await Process3();
    }

    private async UniTask Process1()
    {
        await UniTask.Delay(1000);
        Debug.Log("Process1 finished!");
    }

    private async UniTask Process2()
    {
        await UniTask.WaitUntil(() => Input.GetButtonDown("Fire1"));
        Debug.Log("Process2 finished!");
    }

    private async UniTask Process3()
    {
        await UniTask.DelayFrame(60);
        Debug.Log("Process3 finished!");
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢Process1(), Process2(), Process3()¤Î3¤Ä¤ÎÈóƱ´ü¥¿¥¹¥¯¤¬½çÈ֤˼¹Ԥµ¤ì¤Þ¤¹¡£
¤½¤ì¤¾¤ì¤Î¥¿¥¹¥¯¤ÏUniTask¤òÊÖ¤·¡¢await¥­¡¼¥ï¡¼¥É¤ò»È¤Ã¤Æ¤½¤Î¥¿¥¹¥¯¤¬´°Î»¤¹¤ë¤Þ¤ÇÂԤĤ³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡UniTask¤Ë¤ÏUniTask.WaitUntil()¥á¥½¥Ã¥É¤¬ÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢¥³¥ë¡¼¥Á¥ó¤ÇÍøÍѤ·¤Æ¤¤¤ë yield return new WaitUntil() ¤ÈƱÍͤε¡Ç½¤òÄ󶡤·¤Þ¤¹¡£


UniTask¤ÈCancellationToken


¡¡CancellationToken(¥­¥ã¥ó¥»¥ì¡¼¥·¥ç¥ó¡¦¥È¡¼¥¯¥ó)¤Ï¡¢ÈóƱ´ü¥¿¥¹¥¯¤Î¥­¥ã¥ó¥»¥ë¤ò¹Ô¤¦¤¿¤á¤Î»ÅÁȤߤǤ¹¡£
°ìÅÙ¥­¥ã¥ó¥»¥ë¤µ¤ì¤¿CancellationToken¤ÏºÆÍøÍѤǤ­¤Ê¤¤¤¿¤á¡¢¿·¤¿¤ÊÈóƱ´ü¥¿¥¹¥¯¤ò³«»Ï¤¹¤ë¤¿¤Ó¤Ë¿·¤·¤¤CancellationToken¤òºîÀ®¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¡¢CancellationToken¤òÍøÍѤ·¤¿UniTask¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡§


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

public class UniTaskCancellationTokenExample : MonoBehaviour
{
    public GameObject button;
    public GameObject cancelButton;
    private CancellationTokenSource cancellationTokenSource;

    private async void Start()
    {
        using (cancellationTokenSource = new CancellationTokenSource())
        {
            await WaitUntilButtonPressed();
        }
    }

    private async UniTask WaitUntilButtonPressed()
    {
        try
        {
            await UniTask.WaitUntil(() => button.GetComponent<Button>().IsPressed(), cancellationToken: cancellationTokenSource.Token);
            Debug.Log("Button pressed!");
        }
        catch (OperationCanceledException)
        {
            Debug.Log("Waiting for button press cancelled!");
        }
    }

    public void OnCancelButtonPressed()
    {
        cancellationTokenSource.Cancel();
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢WaitUntilButtonPressed¥á¥½¥Ã¥É¤¬¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤ë¤Î¤òÂÔ¤ÄÈóƱ´ü¥¿¥¹¥¯¤òºîÀ®¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢¤½¤Î¥¿¥¹¥¯¤¬´°Î»¤¹¤ë¤Þ¤Çawait¥­¡¼¥ï¡¼¥É¤ò»È¤Ã¤ÆÂÔ¤Á¤Þ¤¹¡£¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¤é¡¢¥á¥Ã¥»¡¼¥¸¤¬¥í¥°¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£

¡¡¤Þ¤¿¡¢¥­¥ã¥ó¥»¥ë¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿¤é¡¢OnCancelButtonPressed¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¡¢CancellationTokenSource¤ÎCancel¥á¥½¥Ã¥É¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢WaitUntilButtonPressed¥á¥½¥Ã¥É¤ÎÈóƱ´ü¥¿¥¹¥¯¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¡¢¥­¥ã¥ó¥»¥ë¤¬È¯À¸¤·¤¿¤³¤È¤¬¥í¥°¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£



¡¡¤½¤ì¤Ç¤Ï¡¢Àè¤Û¤ÉÄ󼨤·¤¿¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤ò UniTask ¤ËÃÖ¤­´¹¤¨¤¿¥µ¥ó¥×¥ë¥³¡¼¥É¤Ë¤â CancellationToken ¤òŬÍѤ·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
UniTask ¤ÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ë¤Ï¡¢CancellationToken ¤ò»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹(¥Ç¥Õ¥©¥ë¥È°ú¿ô¤Ï null ¤Ç¤¹)¡£


using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskExample : MonoBehaviour
{
    private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

    private async void Start()
    {
        await Process1();
        await Process2();
        await Process3();
    }

    private async UniTask Process1()
    {
        await UniTask.Delay(1000, cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process1 finished!");
    }

    private async UniTask Process2()
    {
        await UniTask.WaitUntil(() => Input.GetButtonDown("Fire1"), cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process2 finished!");
    }

    private async UniTask Process3()
    {
        await UniTask.DelayFrame(60, cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process3 finished!");
    }

    public void CancelAllProcesses()
    {
        cancellationTokenSource.Cancel();
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢³ÆÈóƱ´ü½èÍý¤ËCancellationToken¤òŬÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤½¤·¤Æ¡¢CancelAllProcesses¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤ë¤È¡¢¤¹¤Ù¤Æ¤ÎÈóƱ´ü½èÍý¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤¹¡£


UniTask¤òÍѤ¤¤¿ÈóƱ´ü½èÍý¤Î¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°


¡¡ÈóƱ´ü½èÍý¤Ç¤Ï¡¢Îã³°¤¬È¯À¸¤¹¤ë²ÄǽÀ­¤¬¾ï¤Ë¸ºß¤·¤Þ¤¹¡£
¤³¤Î¾ì¹ç¡¢try/catch¥Ö¥í¥Ã¥¯¤ò»ÈÍѤ·¤ÆÎã³°¤òŬÀڤ˥ϥó¥É¥ê¥ó¥°¤¹¤ë¤³¤È¤¬½ÅÍפǤ¹¡£
Æäˡ¢CancellationToken¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤¿¤È¤­¤ÏOperationCanceledException¤¬¥¹¥í¡¼¤µ¤ì¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¡¢ÈóƱ´ü½èÍý¤Î¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡§


using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskErrorHandlingExample : MonoBehaviour
{
    private async void Start()
    {
        try
        {
            await Process();
        }
        catch (System.Exception e)
        {
            Debug.Log("An error occurred: " + e.Message);
        }
    }

    private async UniTask Process()
    {
        // Here, something might throw an exception...
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢Process()¥á¥½¥Ã¥É¤¬²¿¤é¤«¤ÎÎã³°¤ò¥¹¥í¡¼¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢Process()¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤Ïtry¥Ö¥í¥Ã¥¯Æâ¤ËÃÖ¤«¤ì¤Æ¤¤¤Þ¤¹¡£
¤â¤·Process()¥á¥½¥Ã¥É¤¬Îã³°¤ò¥¹¥í¡¼¤·¤¿¤é¡¢¤½¤ì¤Ïcatch¥Ö¥í¥Ã¥¯¤ÇÊ᪤µ¤ì¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤¬¥í¥°¤Ë½ÐÎϤµ¤ì¤Þ¤¹¡£



¡¡¤½¤ì¤Ç¤Ï¡¢Àè¤Û¤ÉÄ󼨤·¤¿¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤ò UniTask ¤ËÃÖ¤­´¹¤¨¤¿¥µ¥ó¥×¥ë¥³¡¼¥É¤Ë¤â¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤òŬÍѤ·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

using Cysharp.Threading.Tasks;
using UnityEngine;

public class UniTaskExample : MonoBehaviour
{
    private CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

    private async void Start()
    {
        try
        {
            await Process1();
            await Process2();
            await Process3();
        }
        catch (OperationCanceledException)
        {
            Debug.Log("Task was cancelled!");
        }
    }

    private async UniTask Process1()
    {
        await UniTask.Delay(1000, cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process1 finished!");
    }

    private async UniTask Process2()
    {
        await UniTask.WaitUntil(() => Input.GetButtonDown("Fire1"), cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process2 finished!");
    }

    private async UniTask Process3()
    {
        await UniTask.DelayFrame(60, cancellationToken: cancellationTokenSource.Token);
        Debug.Log("Process3 finished!");
    }

    public void CancelAllProcesses()
    {
        cancellationTokenSource.Cancel();
    }
}
¡¡
¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢³ÆÈóƱ´ü½èÍý¤ËCancellationToken¤òŬÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤½¤·¤Æ¡¢CancelAllProcesses¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤ë¤È¡¢¤¹¤Ù¤Æ¤ÎÈóƱ´ü½èÍý¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤¹¡£

¡¡¤½¤³¤Ç¡¢Start¥á¥½¥Ã¥É¤ÇÈóƱ´ü½èÍý¤òawait¤¹¤ëºÝ¤Ï¡¢¥­¥ã¥ó¥»¥ë¤¬È¯À¸¤·¤¿¾ì¹ç¤ËÈ÷¤¨¤Ætry/catch¥Ö¥í¥Ã¥¯¤Ç°Ï¤ó¤Ç¤¤¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢ÈóƱ´ü½èÍý¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤¿¾ì¹ç¤Ç¤âŬÀڤ˽èÍý¤Ç¤­¤Þ¤¹¡£


UniTask¤ÈDOTween


¡¡UniTask¤ÏDOTween¤È¤âÏ¢·È¤¬²Äǽ¤Ç¡¢ÈóƱ´ü¤ËTween¤òÂԤĤ³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Þ¤¿ CancellationToken ¤â»ØÄꤷ¡¢¥¨¥é¡¼¥Ï¥ó¥É¥ê¥ó¥°¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¤½¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£


using Cysharp.Threading.Tasks;
using UnityEngine;
using DG.Tweening;

public class UniTaskDOTweenExample : MonoBehaviour
{
    public GameObject target;

    private async void Start()
    {
        var token = this.GetCancellationTokenOnDestroy();

        try
        {
            await target.transform.DOMove(new Vector3(10, 0, 0), 1).ToUniTask(cancellationToken: token);
            Debug.Log("Move completed!");
        }
        catch (OperationCanceledException)
        {
            Debug.Log("Move cancelled!");
        }
    }
}

¡¡¤³¤Î¥³¡¼¥É¤Ç¤Ï¡¢ÂоݤΥª¥Ö¥¸¥§¥¯¥È¤ò¿·¤·¤¤°ÌÃ֤˰ÜÆ°¤µ¤»¤ëTween¤òºîÀ®¤·¡¢¤½¤ÎTween¤¬´°Î»¤¹¤ë¤Þ¤ÇÈóƱ´ü¤ËÂԤĤ³¤È¤¬¤Ç¤­¤Þ¤¹¡£
GetCancellationTokenOnDestroy¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¡¢¤³¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿¤È¤­¤Ë¼«Æ°Åª¤ËÈóƱ´ü¥¿¥¹¥¯¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

¡¡DOTween ¤Î¤è¤¦¤Ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎµóÆ°¤Ëɳ¤Å¤¤¤Æ¤¤¤ë½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢
¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤ÇÈóƱ´ü½èÍý¤¬¥­¥ã¥ó¥»¥ë¤µ¤ì¤ë GetCancellationTokenOnDestroy¥á¥½¥Ã¥É¤ò CancellationToken ¤ËŬÍѤ¹¤ë¤ÈÊØÍø¤Ç¤¹¡£


¡¡
¡¡º£²óÄ󼨤·¤Æ¤¤¤ë DOTween ¤ÎÂÔµ¡½èÍý¤Ç¤¹¤¬

¡¡await target.transform.DOMove(new Vector3(10, 0, 0), 1).ToUniTask(cancellationToken: token); 

¡¡°Ê²¼¤Î½ñ¼°¤Ç¤âƱ¤¸½èÍý¤ò¼ÂÁõ½ÐÍè¤Þ¤¹¡£


¡ãÊ̥ѥ¿¡¼¥ó­¡¡ä
¡¡await target.DOMove(new Vector3(10, 0, 0), 1).AsyncWaitForCompletion(cancellationToken: token);

¡ãÊ̥ѥ¿¡¼¥ó­¢¡ä
Tween tween = target.DOMove(new Vector3(10, 0, 0), 1);
        
await tween.ToUniTask(cancellationToken: token);

¡¡Ê£¿ô¤Î½ñ¼°¤¬¤¢¤ë¾ì¹ç¡¢µ­½Ò¤Ë°ì´ÓÀ­¤ò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤ì¤Ð¤É¤Î½èÍý¤òÍøÍѤ·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£


¤Þ¤È¤á


¡¡¤³¤Îµ­»ö¤Ç¤Ï¡¢UniTask¤òÍѤ¤¤¿Unity¤Ç¤ÎÈóƱ´ü½èÍý¤Î´ðÁäˤĤ¤¤Æ²òÀ⤷¤Þ¤·¤¿¡£
UniTask¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢¥³¥ë¡¼¥Á¥ó¤Î´ÉÍý¤¬¤è¤êÍưפˤʤꡢ¥³¡¼¥É¤âľ´¶Åª¤Ë¤Ê¤ê¤Þ¤¹¡£
CancellationToken¤òÍѤ¤¤ÆÈóƱ´ü½èÍý¤ò¥­¥ã¥ó¥»¥ë¤¹¤ëÊýË¡¤ä¡¢DOTween¤È¤ÎÏ¢·ÈÊýË¡¤Ë¤Ä¤¤¤Æ¤âÀâÌÀ¤·¤Þ¤·¤¿¡£

¡¡ÈóƱ´ü½èÍý¤ÏUnity¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ò¸þ¾å¤µ¤»¤ë¶¯ÎϤʥġ¼¥ë¤Ç¤¢¤ê¡¢UniTask¤Ï¤½¤Î¼ÂÁõ¤ò½õ¤±¤ë½ÅÍפʥ饤¥Ö¥é¥ê¤Ç¤¹¡£
¤·¤«¤·¡¢ÈóƱ´ü½èÍý¤ÏÎã³°¤ò¤¦¤Þ¤¯¥Ï¥ó¥É¥ê¥ó¥°¤¹¤ë¤³¤È¤¬µá¤á¤é¤ì¤ë¤¿¤á¡¢try/catch¥Ö¥í¥Ã¥¯¤òŬÀڤ˻ÈÍѤ¹¤ë¤³¤È¤ò˺¤ì¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆ⤫¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆ⤫¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹