CoroutineTest.csUnity記事: 目次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
using System.Collections; using UnityEngine; /// <summary> /// /// Unity 2018.2.10f1 /// /// </summary> public class CoroutineTest : MonoBehaviour { private int frameCount; // Use this for initialization private void Start() { Debug.Log("Start !!"); StartCoroutine(MainCoroutine()); } // Update is called once per frame private void Update() { // フレーム数をカウント frameCount++; } // MainCoroutine private IEnumerator MainCoroutine() { // 1. 条件が成立している間は待機 yield return new WaitWhile(() => { return frameCount < 50; }); Debug.Log("Frame: " + frameCount); // 2. 条件が成立するまで待機 yield return new WaitUntil(() => { return frameCount >= 100; }); Debug.Log("Frame: " + frameCount); // 3. サブコルーチンの終了まで待機 yield return SubCoroutine(); Debug.Log("Frame: " + frameCount); // 4. カスタムコルーチンの終了まで待機 yield return new CustomYieldInstructionTest(); // 5. 秒数を指定して待機 WaitForSeconds waitOneSecond = new WaitForSeconds(1.0f); Debug.Log("Countdown : 3"); yield return waitOneSecond; Debug.Log("Countdown : 2"); yield return waitOneSecond; Debug.Log("Countdown : 1"); yield return waitOneSecond; Debug.Log("Finished !!"); } // SubCoroutine private IEnumerator SubCoroutine() { while (frameCount < 150) { yield return null; } } } |
CustomYieldInstructionTest.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
using UnityEngine; /// <summary> /// /// Unity 2018.2.10f1 /// /// 処理を中断するyield命令の追加 /// /// </summary> public class CustomYieldInstructionTest : CustomYieldInstruction { // Constructor public CustomYieldInstructionTest() { Debug.Log("Please press the Enterkey"); } // keepWaitingがtrueを返す間は処理が中断される public override bool keepWaiting { get { // Enterキーの入力状態がfalseの間はtrueを返す return !Input.GetKeyDown(KeyCode.Return); } } } |