質問編集履歴

10

修正

2020/11/02 06:43

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- 解決後の追記:デリゲートでの記述
67
+ bboydaisukeさん回答を受けての追記:デリゲートでの記述
68
68
 
69
69
  ---
70
70
 
@@ -131,3 +131,21 @@
131
131
  }
132
132
 
133
133
  ```
134
+
135
+ katsukoさんの回答を受けての結論
136
+
137
+ ---
138
+
139
+
140
+
141
+ コルーチンはプログラムを任意の箇所で中断・再開するしくみという認識が正確に出来ていなかったようです。
142
+
143
+
144
+
145
+ `() => StartCoroutine( CorutineTest() )`は毎回初期位置に戻って呼び出されるので`Debug.Log`が呼ばれる。
146
+
147
+ `() => StartCoroutine( enumerator )`は初期位置に戻らないので`Debug.Log`が呼ばれない。
148
+
149
+
150
+
151
+ 上記動作の違いがある為に差異が発生していました。

9

修正

2020/11/02 06:43

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
62
62
 
63
- `UnityAction`は`delegate``IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
63
+ `UnityAction`は`delegate``IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
64
64
 
65
65
 
66
66
 

8

追記修正

2020/11/02 06:15

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -64,13 +64,13 @@
64
64
 
65
65
 
66
66
 
67
- 追記:複数回呼び出せる記述
67
+ 解決後の追記:デリゲートでの記述
68
68
 
69
69
  ---
70
70
 
71
71
 
72
72
 
73
- bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
73
+ bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば問題無く複数回呼び出せるようになりました。
74
74
 
75
75
 
76
76
 

7

修正

2020/07/16 16:59

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -76,8 +76,6 @@
76
76
 
77
77
  内部的処理の説明などまだ完璧では無いですが対処法は今後大丈夫そうです。
78
78
 
79
- ありがとうございました。
80
-
81
79
 
82
80
 
83
81
  ```C#

6

修正

2020/07/16 10:59

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -112,9 +112,9 @@
112
112
 
113
113
 
114
114
 
115
- button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) );
115
+ button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) ); // 何度も呼び出せる
116
116
 
117
- button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) );
117
+ button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) ); // 何度も呼び出せる
118
118
 
119
119
  }
120
120
 

5

修正

2020/07/16 10:59

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
 
76
76
 
77
- 内部的処理の違いなどまだ完璧では無いですが対処法は今後大丈夫そうです。
77
+ 内部的処理の説明などまだ完璧では無いですが対処法は今後大丈夫そうです。
78
78
 
79
79
  ありがとうございました。
80
80
 

4

追記

2020/07/16 10:58

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,11 @@
64
64
 
65
65
 
66
66
 
67
- **・追記**
67
+ 追記:複数回呼び出せる記述
68
+
69
+ ---
70
+
71
+
68
72
 
69
73
  bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
70
74
 

3

追記

2020/07/16 10:56

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -61,3 +61,71 @@
61
61
  UnityAction型での関数呼び出しではこういった違いが無いのは確認しています。
62
62
 
63
63
  `UnityAction`は`delegate`で`IEnumerator`は`interface`なのでこの辺りの違いから発生している事かと調べていますが詳しい記述がヒットしないので質問させて頂きました。
64
+
65
+
66
+
67
+ **・追記**
68
+
69
+ bboydaisukeさんが提示してくれたサイトを参考に**コルーチン用のデリゲート**を用意してそれに代入して呼び出すように変更すれば複数回呼び出せるようになりました。
70
+
71
+
72
+
73
+ 内部的処理の違いなどまだ完璧では無いですが対処法は今後大丈夫そうです。
74
+
75
+ ありがとうございました。
76
+
77
+
78
+
79
+ ```C#
80
+
81
+ using UnityEngine;
82
+
83
+ using System.Collections;
84
+
85
+ using UnityEngine.UI;
86
+
87
+
88
+
89
+ public class TestCode : MonoBehaviour
90
+
91
+ {
92
+
93
+ [SerializeField]
94
+
95
+ Button[] button = null;
96
+
97
+
98
+
99
+ private delegate IEnumerator CoroutineDelegate();
100
+
101
+
102
+
103
+ private void Start()
104
+
105
+ {
106
+
107
+ CoroutineDelegate corutineDelegate = CorutineTest;
108
+
109
+
110
+
111
+ button[ 0 ].onClick.AddListener( () => StartCoroutine( CorutineTest() ) );
112
+
113
+ button[ 1 ].onClick.AddListener( () => StartCoroutine( corutineDelegate () ) );
114
+
115
+ }
116
+
117
+
118
+
119
+ IEnumerator CorutineTest()
120
+
121
+ {
122
+
123
+ Debug.Log( "A" );
124
+
125
+ yield return null;
126
+
127
+ }
128
+
129
+ }
130
+
131
+ ```

2

修正

2020/07/16 10:53

投稿

Hawn
Hawn

スコア1222

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- 下記の様にボタン二つを用意して「そのまま呼び出す」、「代入して呼び出す」を試しましたが後者の方は一回しか呼び出せません。
7
+ 下記の様にボタン二つを用意して同じコルーチンを「そのまま呼び出す」、「代入して呼び出す」を試しましたが後者の方は一回しか呼び出せません。
8
8
 
9
9
 
10
10
 

1

追記

2020/07/16 09:11

投稿

Hawn
Hawn

スコア1222

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