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

Ãí°ÕÅÀ


¡¡£±¡¥IEnumerator ·¿¤ÎÊÑ¿ô¤òºîÀ®¤·¤Æ¥³¥ë¡¼¥Á¥ó¤È¤·¤Æ¼Â¹Ô¤¹¤ë¡£
¡¡£²¡¥yield retrun ¤Ç¼Â¹Ô¤·¤Æ¤¤¤ë¥³¥ë¡¼¥Á¥ó½èÍý¤Ç¤Ê¤±¤ì¤Ð¼èÆÀ¤Ç¤­¤Ê¤¤¡£
¡¡£³¡¥¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâÉô¤Ç yield return ¤Î½èÍý¤ò½ñ¤­¡¢Ìá¤êÃͤÎÃͤòÍÑ°Õ¤¹¤ë

¡¡ÈóƱ´ü½èÍý¤Î¤¿¤á¡¢½èÍý¤¬½ªÎ»¤¹¤ë¥¿¥¤¥ß¥ó¥°¤Þ¤ÇÂÔ¤¿¤Ê¤¤¤È½èÍý·ë²Ì¤Ï¼èÆÀ½ÐÍè¤Þ¤»¤ó¡£
¤Þ¤¿¡¢IEnumerator ·¿¤ÎÊÑ¿ôÆâÉô¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤Ç yield return ¤ÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ëÌá¤êÃͤ¬¼èÆÀ¤Ç¤­¤ë¤¿¤á¡¢
ÊÑ¿ô¤ËÂåÆþ¤·¤Æ¼Â¹Ô¤·¤Ê¤¤¤È¼èÆÀ½ÐÍè¤Þ¤»¤ó¡£


¥³¥ë¡¼¥Á¥ó¤«¤éÌá¤êÃͤò¼èÆÀ¤¹¤ë­¡


¡¡¥³¥ë¡¼¥Á¥ó¤«¤éÌá¤êÃͤò¼èÆÀ¤¹¤ë¤Ë¤Ï¡¢¥³¥ë¡¼¥Á¥óÆâ¤Çyield returnʸ¤ò»ÈÍѤ·¡¢¤½¤Î¸å¤Î½èÍý¤ò¥³¥ë¡¼¥Á¥ó¤¬´°Î»¤·¤¿¸å¤Ë¼Â¹Ô¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¶ñÂÎŪ¤Ê¼ê½ç¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

¡¡£±¡¥IEnumerator·¿¤ÎÊÑ¿ô¤òÀë¸À¤·¡¢yield return ÉÕ¤­¤Î StartCoroutine ¤Î°ú¿ô¤È¤·¤Æ¼Â¹Ô¤·¤Þ¤¹¡£
¡¡£²¡¥¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâ¤Çyield return¤ò»È¤Ã¤ÆÃͤòÊÖ¤·¤Þ¤¹¡£
¡¡£³¡¥¥³¥ë¡¼¥Á¥ó¤¬´°Î»¤·¤¿¸å¡¢¤½¤Î IEnumerator·¿¤ÎÊÑ¿ô¤«¤éÃͤò¼èÆÀ¤·¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£


private IEnumerator Start()
{
¡¡¡¡// IEnumerator ·¿¤Î coroutine ÊÑ¿ô¤òÀë¸À¤·¡¢¼Â¹Ô¤·¤¿¤¤¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤òÂåÆþ¤¹¤ë
¡¡¡¡IEnumerator coroutine = MyCoroutine();

¡¡¡¡// Start ¥á¥½¥Ã¥É¤ò¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ËÊѹ¹¤·¤Æ¤¤¤ë¤Î¤Ç¡¢­¡¡¦­¢¤Î¤É¤Á¤é¤ÎÊýË¡¤Ç¤â¼Â¹Ô²Äǽ
¡¡¡¡// ¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô­¡
    yield return StartCoroutine(coroutine);

¡¡¡¡// ¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô­¢
    yield return coroutine;

¡¡¡¡// ¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆ⤫¤éÌá¤êÃͤò Current ¤È¤·¤Æ¼èÆÀ¤¹¤ë
¡¡¡¡int result = (int)coroutine.Current;

    Debug.Log("¥³¥ë¡¼¥Á¥ó¤«¤é¤ÎÌá¤êÃÍ: " + result);
}

private IEnumerator MyCoroutine()
{
    yield return new WaitForSeconds(2f); // 2ÉÃÂÔ¤Ä
    yield return 42; // 42¤òÊÖ¤¹
}

¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ÎÂåÆþ¤µ¤ì¤Æ¤¤¤ëÊÑ¿ô¤ËÂФ·¤Æ¡¢Current ¥×¥í¥Ñ¥Æ¥£¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç
yield return ¤µ¤ì¤Æ¤¤¤ëÃͤòÌá¤êÃͤȤ·¤Æ¼èÆÀ½ÐÍè¤Þ¤¹¡£

¡¡¤³¤ì¤Ï object ·¿¤Ë¤Ê¤ë¤¿¤á¡¢ÌÀ¼¨Åª¤ÊÊÑ´¹(¥­¥ã¥¹¥È)½èÍý¤¬É¬Íפˤʤê¤Þ¤¹¡£



¡¡Ä̾ï¤Î Start ¥á¥½¥Ã¥É¤Ç¤ÏÀµ¾ï¤ËÆ°ºî¤·¤Þ¤»¤ó¡£

private IEnumerator Start()
{
¡¡¡¡// IEnumerator ·¿¤Î coroutine ÊÑ¿ô¤òÀë¸À¤·¡¢¼Â¹Ô¤·¤¿¤¤¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤òÂåÆþ¤¹¤ë
¡¡¡¡IEnumerator coroutine = MyCoroutine();

¡¡¡¡// ¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò¼Â¹Ô
    StartCoroutine(coroutine);

¡¡¡¡int result = (int)coroutine.Current;

    Debug.Log("¥³¥ë¡¼¥Á¥ó¤«¤é¤ÎÌá¤êÃÍ: " + result);
}

¡¡¤³¤Î¤è¤¦¤Ê·Á¤Ç½ñ¤¯¤³¤È¤Ë¤Ê¤ë¤¿¤á¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î½èÍý·ë²Ì¤òÂÔ¤¿¤º¤Ë²¼¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâ¤ÎÌá¤êÃͤϼèÆÀ½ÐÍè¤Þ¤»¤ó¡£(null ¤Ë¤Ê¤ê¤Þ¤¹)


»²¹Í¥µ¥¤¥È
¥Ï¥ë¥·¥ª¥ó¥·¥¹¥Æ¥à ÍÍ
¡Ú¥Ï¥ë¥·¥ª¥ó¥Ö¥í¥°¡ÛUnity¤Î¥³¥ë¡¼¥Á¥ó¤ÇÃͤòÊÖ¤¹ÊýË¡¡£¤¤¤¯¤Ä¤«ÊýË¡¤¢¤ë¤Ý¤¤¤±¤É¡¢¤½¤Î°ì¤Ä¤ò¾Ò²ð¡£


¥³¥ë¡¼¥Á¥ó¤«¤éÌá¤êÃͤò¼èÆÀ¤¹¤ë­¢


¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ë Action ·¿¤Ç¡¢»öÁ°¤ËÌá¤êÃͤò¼õ¤±¼è¤ë¤¿¤á¤ËÍÑ°Õ¤·¤¿ÊÑ¿ô¤ò°ú¿ô¤òÅϤ·¤Æ¼Â¹Ô¤¹¤ëÊýË¡¤Ç¤¹¡£


using System;
using System.Collections;
using UnityEngine;

public class CoroutineReturnValue : MonoBehaviour
{
    private IEnumerator Start()
    {
        int value = 0;
        yield return StartCoroutine(MyCoroutine(x => value = x));
        Debug.Log("¥³¥ë¡¼¥Á¥ó¤«¤é¤ÎÌá¤êÃͤηë²Ì: " + value);
    }

    private IEnumerator MyCoroutine(Action<int> callback)
    {
        yield return new WaitForSeconds(2f); // 2ÉÃÂÔ¤Ä
        int result = 42; // 42¤òÊÖ¤¹
        callback(result); // Ìá¤êÃͤò¥³¡¼¥ë¥Ð¥Ã¥¯¤Ç³°Éô¤ËÄÌÃÎ
    }
}



¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâ¤Î callback(result) ¤ÎÉôʬ¤Ë¤Ä¤¤¤Æ¤Ï¡¢null ¥Á¥§¥Ã¥¯¤ò¹Ô¤Ã¤¿Êý¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£
°Ê²¼¤Î£²¤Ä¤ÎÊýË¡¤ò¥µ¥ó¥×¥ë¤È¤·¤ÆÄ󼨤·¤Þ¤¹¡£


¡ã­¡¡¡if ʸ¤ò»ÈÍѤ¹¤ëÊýË¡¡ä
    private IEnumerator MyCoroutine(Action<int> callback)
    {
        yield return new WaitForSeconds(2f); // 2ÉÃÂÔ¤Ä
        int result = 42; // 42¤òÊÖ¤¹

        if (callback != null)
        {
             callback(result); // Ìá¤êÃͤò¥³¡¼¥ë¥Ð¥Ã¥¯¤Ç³°Éô¤ËÄÌÃÎ
        }
    }



¡ã­¢¡¡?.±é»»»Ò¤ò»ÈÍѤ¹¤ëÊýË¡¡ä
    private IEnumerator MyCoroutine(Action<int> callback)
    {
        yield return new WaitForSeconds(2f); // 2ÉÃÂÔ¤Ä
        int result = 42; // 42¤òÊÖ¤¹

        callback?.Invoke(result);// Ìá¤êÃͤò¥³¡¼¥ë¥Ð¥Ã¥¯¤Ç³°Éô¤ËÄÌÃÎ
    }

¡¡null ¥Á¥§¥Ã¥¯¤¹¤ë¤³¤È¤Ç°ÂÁ´¤Ë¼Â¹Ô¤Ç¤­¤Þ¤¹¡£

¿¹¤Á¤ã¤ó¤ÎUnity³«È¯Ï¿
¡ÚUnity¡ÛÈóƱ´ü½èÍý¡¢IEnumerator¤ÇÊÖ¤êÃÍ(Ìá¤êÃÍ)¤ò¼ÂÁõ¤¹¤ë


UniTask ¤Î¾ì¹ç


¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤«¤éÌá¤êÃͤò¼èÆÀ¤¹¤ë¤Ë¤Ï¼ê´Ö¤¬¤«¤«¤ê¤Þ¤¹¤Î¤Ç¡¢UniTask ¤Ë¤è¤ëÈóƱ´ü½èÍý¤ò³èÍѤ·¤Þ¤·¤ç¤¦¡£

¡¡¥×¥í¥¸¥§¥¯¥È¤ËUniTask¤Î°Í¸´Ø·¸¤òÄɲä·¡¢UniTask¤ò»ÈÍѤǤ­¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò˺¤ì¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£

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

public class UniTaskExample : MonoBehaviour
{
    private async void Start()
    {
        int result = await MyUniTask();
        Debug.Log("UniTask¤«¤é¤ÎÌá¤êÃÍ: " + result);
    }

    private async UniTask<int> MyUniTask()
    {
        await UniTask.Delay(TimeSpan.FromSeconds(2)); // 2ÉÃÂÔ¤Ä
        return 42;
    }
}

¡¡¤³¤ÎÎã¤Ç¤Ï¡¢UniTask¤ÎUniTask.Delay¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤ÆÈóƱ´ü½èÍý¤ò¹Ô¤¤¡¢await¥­¡¼¥ï¡¼¥É¤ò»ÈÍѤ·¤ÆÈóƱ´üÁàºî¤¬´°Î»¤¹¤ë¤Î¤òÂԤäƤ¤¤Þ¤¹¡£
¤½¤Î¸å¡¢UniTask¤«¤é¤ÎÌá¤êÃͤò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡UniTask ¤ÎÌá¤êÃÍ¤Ï T(¥¸¥§¥Í¥ê¥Ã¥¯)·¿¤Ç¤¹¤Î¤Ç¡¢Ç¤°Õ¤Î·¿¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢Ìá¤êÃͤʤ·¤Ç¤âÀßÄê¤Ç¤­¤Þ¤¹¡£


UniTask¤ÎÍøÅÀ


¡¡UniTask ¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¡¢ÂÔµ¡Á°Äó¤Ç¼ÂÁõ²Äǽ¤Ê½ñ¼°¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥³¥ë¡¼¥Á¥ó¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¡¢ÂÔµ¡¤·¤Ê¤¤Á°Äó¤Ç¤Î½ñ¼°¤Ç¤¹¡£
ÂÔµ¡¤µ¤»¤ë¤Ë¤Ï¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâÉô¤Ç¡¢yield return ¤ò¤Ä¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤ÎÉôʬ¤ËÂ礭¤Ê°ã¤¤¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢UniTask ¤ÏÌá¤êÃͤò¼õ¤±¼è¤ë¤³¤È¤¬Á°Äó¤ÎÀ߷פˤʤäƤ¤¤Þ¤¹¡£

¡¡UniTask¤Ï¡¢ÈóƱ´ü¥á¥½¥Ã¥É¤«¤éÊ£¿ô¤ÎÃͤòÌ᤹¤¿¤á¤Ë¥¿¥×¥ë¤ä¥«¥¹¥¿¥à¥¯¥é¥¹¤Ê¤É¤ÎÊýË¡¤òÄ󶡤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Ê£¿ô¤Î°Û¤Ê¤ë¥Ç¡¼¥¿¤ò°ìÅ٤˼èÆÀ¤Ç¤­¡¢¥³¡¼¥É¤ò¤è¤ê¸úΨŪ¤Ëµ­½Ò¤Ç¤­¤Þ¤¹¡£
¤³¤ÎÍøÅÀ¤Ï¡¢Ê£»¨¤ÊÈóƱ´üÁàºî¤ä¥Ç¡¼¥¿¤ÎʹԽèÍý¤¬É¬Íפʾì¹ç¤ËÆäËÌòΩ¤Á¤Þ¤¹¡£

¡¡°Ê²¼¤Ë¡¢Ê£¿ô¤ÎÃͤòÌ᤹UniTask¤Î¥µ¥ó¥×¥ë¥³¡¼¥É¤ò¼¨¤·¤Þ¤¹¡£

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

public class UniTaskMultipleValuesExample : MonoBehaviour
{
    private async void Start()
    {
        (int, string) result = await MyUniTaskWithMultipleValues();
        Debug.Log("UniTask¤«¤é¤ÎÌá¤êÃÍ: " + result.Item1 + ", " + result.Item2);
    }

    private async UniTask<(int, string)> MyUniTaskWithMultipleValues()
    {
        await UniTask.Delay(TimeSpan.FromSeconds(2)); // 2ÉÃÂÔ¤Ä
        return (42, "Hello, World!");
    }
}

¡¡¤³¤ÎÎã¤Ç¤Ï¡¢MyUniTaskWithMultipleValues¥á¥½¥Ã¥É¤¬UniTask¤ò»ÈÍѤ·¤Æ2¤Ä¤Î°Û¤Ê¤ëÃÍ¡ÊÀ°¿ô¤Èʸ»úÎó¡Ë¤òÊÖ¤·¤Þ¤¹¡£
¥³¡¼¥ÉÆâ¤Ç¥¿¥×¥ë (int, string) ¤ò»ÈÍѤ·¤Æ¤³¤ì¤é¤ÎÃͤò¼èÆÀ¤·¡¢¤½¤ì¤¾¤ì result.Item1 ¤È result.Item2 ¤Ç¥¢¥¯¥»¥¹¤·¤Æ¤¤¤Þ¤¹¡£

¡¡UniTask¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢ÈóƱ´ü½èÍý¤«¤éÊ£¿ô¤ÎÌá¤êÃͤò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢¥³¡¼¥É¤ò¤è¤ê´Ê·é¤«¤Ä¸úΨŪ¤Ëµ­½Ò¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

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


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

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

Menu


´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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