ºÇ½ª¹¹¿·¡§ orika_ex_miyako 2023ǯ10·î31Æü(²Ð) 13:48:39ÍúÎò
¡¡¥³¥ë¡¼¥Á¥ó¤Ï 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¤ò²ð¤·¤ÆÈóƱ´ü½èÍý¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î¿·¤·¤¤¥á¥½¥Ã¥É¤òºîÀ®¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯