タイトルのとおりですが、以下のようにスペースキーを押すと、フルーツと野菜のリストを交互に入れ替えて名前をログ出力するだけの処理です。
ここで、表示処理がすべて終わらないうちにスペースキーを押すと、
StopCoroutine(showName())をしているにも関わらず、
画像のようにInvalidOperationExceptionが発生してしまいます。
中止しているように見えて中止していないのでしょうか?解決する方法はないでしょうか?
c#
1public class TestScript : MonoBehaviour { 2 private List<string> mList; 3 private bool mFruitOn = true; 4 private string[] fruits = new string[] {"りんご", "みかん", "バナナ"}; 5 private string[] vegetables = new string[] {"キャベツ", "にんじん", "トマト"}; 6 7 void Start () { 8 mList = new List<string>(); 9 } 10 11 void Update () { 12 if (Input.GetKeyUp(KeyCode.Space)) { 13 Debug.Log ("★Spaceを押した"); 14 // 非同期の表示処理を中止 15 StopCoroutine(showName()); 16 // リストを一旦削除 17 mList.Clear(); 18 // 入れ直す 19 if (mFruitOn) { 20 foreach (string name in fruits) { 21 mList.Add(name); 22 } 23 } else { 24 foreach (string name in vegetables) { 25 mList.Add(name); 26 } 27 } 28 mFruitOn = !mFruitOn; 29 // 非同期で表示処理 30 StartCoroutine(showName()); 31 } 32 } 33 /** 34 * 1秒ずつ名前を出力 35 */ 36 private IEnumerator showName() { 37 foreach (string name in mList) { 38 // 処理 39 Debug.Log (name); 40 yield return new WaitForSeconds(1f); 41 } 42 } 43 44}
◆環境
Unity2017 3.1f1

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/17 06:05
2018/06/17 06:09