ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ05·î15Æü(·î) 15:02:19ÍúÎò
¡¡È󯱴ü½èÍý¤Ï¡¢¥×¥í¥°¥é¥à¤¬Ê£¿ô¤Î¥¿¥¹¥¯¤òÊÂÎó¤Ë½èÍý¤¹¤ë¼êË¡¤Î°ì¤Ä¤Ç¤¹¡£
Î㤨¤Ð¡¢½Å¤¤½èÍý¤ò¹Ô¤¦¥¿¥¹¥¯¤òÊ̤Υ¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤·¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ï¥æ¡¼¥¶¡¼¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¹¹¿·¤Ê¤É¤ËÀìǰ¤¹¤ë¤È¤¤¤Ã¤¿»È¤¤Êý¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥×¥í¥°¥é¥à¤Î±þÅúÀ¤òÊݤÁ¤Ä¤Ä¡¢¸úΨŪ¤ËÊ£¿ô¤Î¥¿¥¹¥¯¤ò¿Ê¹Ô¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡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¤Ï¡¢Unity¸þ¤±¤ÎÈ󯱴ü½èÍý¥é¥¤¥Ö¥é¥ê¤Ç¡¢Unity¤Î¥³¥ë¡¼¥Á¥ó¤ò¤è¤ê¸úΨŪ¤«¤ÄÊØÍø¤Ë»È¤¦¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
ÆÃ¤Ë¡¢async/await¥Ñ¥¿¡¼¥ó¤ò³èÍѤ¹¤ë¤³¤È¤Ç¡¢È󯱴ü¤Î¥í¥¸¥Ã¥¯¤òľ´¶Åª¤Ëµ½Ò¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡°Ê²¼¤Ï¡¢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() ¤ÈƱÍͤε¡Ç½¤òÄ󶡤·¤Þ¤¹¡£
¡¡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¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤ë¤È¡¢¤¹¤Ù¤Æ¤ÎÈ󯱴ü½èÍý¤¬¥¥ã¥ó¥»¥ë¤µ¤ì¤Þ¤¹¡£
¡¡È󯱴ü½èÍý¤Ç¤Ï¡¢Îã³°¤¬È¯À¸¤¹¤ë²ÄǽÀ¤¬¾ï¤Ë¸ºß¤·¤Þ¤¹¡£
¤³¤Î¾ì¹ç¡¢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¤È¤âÏ¢·È¤¬²Äǽ¤Ç¡¢È󯱴ü¤Ë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¥Ö¥í¥Ã¥¯¤òŬÀڤ˻ÈÍѤ¹¤ë¤³¤È¤ò˺¤ì¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯