teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

10

修正

2020/11/02 06:43

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -31,7 +31,7 @@
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
32
  `UnityAction`は`delegate`、`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
33
33
 
34
- 解決後の追記:デリゲートでの記述
34
+ bboydaisukeさん回答を受けての追記:デリゲートでの記述
35
35
  ---
36
36
 
37
37
  bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば問題無く複数回呼び出せるようになりました。
@@ -64,4 +64,13 @@
64
64
  yield return null;
65
65
  }
66
66
  }
67
- ```
67
+ ```
68
+ katsukoさんの回答を受けての結論
69
+ ---
70
+
71
+ コルーチンはプログラムを任意の箇所で中断・再開するしくみという認識が正確に出来ていなかったようです。
72
+
73
+ `() => StartCoroutine( CorutineTest() )`は毎回初期位置に戻って呼び出されるので`Debug.Log`が呼ばれる。
74
+ `() => StartCoroutine( enumerator )`は初期位置に戻らないので`Debug.Log`が呼ばれない。
75
+
76
+ 上記動作の違いがある為に差異が発生していました。

9

修正

2020/11/02 06:43

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -29,7 +29,7 @@
29
29
  }
30
30
  ```
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
- `UnityAction`は`delegate``IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
32
+ `UnityAction`は`delegate``IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
33
33
 
34
34
  解決後の追記:デリゲートでの記述
35
35
  ---

8

追記修正

2020/11/02 06:15

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -31,10 +31,10 @@
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
32
  `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
33
33
 
34
- 追記:複数回呼び出せる記述
34
+ 解決後の追記:デリゲートでの記述
35
35
  ---
36
36
 
37
- bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
37
+ bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば問題無く複数回呼び出せるようになりました。
38
38
 
39
39
  内部的処理の説明などまだ完璧では無いですが対処法は今後大丈夫そうです。
40
40
 

7

修正

2020/07/16 16:59

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -37,7 +37,6 @@
37
37
  bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
38
38
 
39
39
  内部的処理の説明などまだ完璧では無いですが対処法は今後大丈夫そうです。
40
- ありがとうございました。
41
40
 
42
41
  ```C#
43
42
  using UnityEngine;

6

修正

2020/07/16 10:59

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -55,8 +55,8 @@
55
55
  {
56
56
  CoroutineDelegate corutineDelegate = CorutineTest;
57
57
 
58
- button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) );
58
+ button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) ); // 何度も呼び出せる
59
- button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) );
59
+ button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) ); // 何度も呼び出せる
60
60
  }
61
61
 
62
62
  IEnumerator CorutineTest()

5

修正

2020/07/16 10:59

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
38
38
 
39
- 内部的処理の違いなどまだ完璧では無いですが対処法は今後大丈夫そうです。
39
+ 内部的処理の説明などまだ完璧では無いですが対処法は今後大丈夫そうです。
40
40
  ありがとうございました。
41
41
 
42
42
  ```C#

4

追記

2020/07/16 10:58

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -31,7 +31,9 @@
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
32
  `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
33
33
 
34
- **・追記**
34
+ 追記:複数回呼び出せる記述
35
+ ---
36
+
35
37
  bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
36
38
 
37
39
  内部的処理の違いなどまだ完璧では無いですが対処法は今後大丈夫そうです。

3

追記

2020/07/16 10:56

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -29,4 +29,38 @@
29
29
  }
30
30
  ```
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
- `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
32
+ `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
33
+
34
+ **・追記**
35
+ bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
36
+
37
+ 内部的処理の違いなどまだ完璧では無いですが対処法は今後大丈夫そうです。
38
+ ありがとうございました。
39
+
40
+ ```C#
41
+ using UnityEngine;
42
+ using System.Collections;
43
+ using UnityEngine.UI;
44
+
45
+ public class TestCode : MonoBehaviour
46
+ {
47
+ [SerializeField]
48
+ Button[] button = null;
49
+
50
+ private delegate IEnumerator CoroutineDelegate();
51
+
52
+ private void Start()
53
+ {
54
+ CoroutineDelegate corutineDelegate = CorutineTest;
55
+
56
+ button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) );
57
+ button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) );
58
+ }
59
+
60
+ IEnumerator CorutineTest()
61
+ {
62
+ Debug.Log( "A" );
63
+ yield return null;
64
+ }
65
+ }
66
+ ```

2

修正

2020/07/16 10:53

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  ボタンイベントを登録してコルーチンを呼び出す際、
2
2
  **IEnumerator型に代入して呼び出すと最初の一回しか呼び出せない**のはどういった理由からでしょうか?
3
3
 
4
- 下記の様にボタン二つを用意して「そのまま呼び出す」、「代入して呼び出す」を試しましたが後者の方は一回しか呼び出せません。
4
+ 下記の様にボタン二つを用意して同じコルーチンを「そのまま呼び出す」、「代入して呼び出す」を試しましたが後者の方は一回しか呼び出せません。
5
5
 
6
6
  ```C#
7
7
  using UnityEngine;

1

追記

2020/07/16 09:11

投稿

Hawn
Hawn

スコア1222

title CHANGED
File without changes
body CHANGED
@@ -29,4 +29,4 @@
29
29
  }
30
30
  ```
31
31
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
32
- `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がいので質問させて頂きました。
32
+ `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。