回答編集履歴
2
文章内のコードにマークダウンを付加
answer
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
改善案としては...
|
41
41
|
|
42
42
|
案1:
|
43
|
-
TakeWhileをやめて、time > 0でフィルタリングするだけにし、ストリームを止めないようにする。
|
43
|
+
`TakeWhile`をやめて、`time > 0`でフィルタリングするだけにし、ストリームを止めないようにする。
|
44
44
|
```C#
|
45
45
|
// 省略
|
46
46
|
void Awake()
|
1
Intervalのストリームに流れる値についての理解が誤っていたため修正
answer
CHANGED
@@ -99,8 +99,8 @@
|
|
99
99
|
|
100
100
|
案3:
|
101
101
|
案2をベースとしつつ、イベントストリームを`UpdateAsObservable`から1秒間隔の`Interval`に置き換える(参考: [UniRxのシンプルなサンプル その9(TimerとInterval 一定時間後に実行) - Qiita](https://qiita.com/Marimoiro/items/a72b60315c797c19a27c))。
|
102
|
-
`time`は初期値`5.0f`のまま書き換えないようにし、ストリームに流れてくる
|
102
|
+
`time`は初期値`5.0f`のまま書き換えないようにし、ストリームに流れてくるプッシュ回数が`time`未満の間テイクして`DiscountReadingTime`を実行する。
|
103
|
-
`DiscountReadingTime`は引数として
|
103
|
+
`DiscountReadingTime`は引数としてプッシュ回数を受け取れるようにし、残り時間に換算して`remainingTime`に表示する。
|
104
104
|
案2と同様、ストリーム完了時に`EndReading`を実行する。
|
105
105
|
```C#
|
106
106
|
public class PlayerControl : MonoBehaviour
|
@@ -120,14 +120,14 @@
|
|
120
120
|
|
121
121
|
IsRead = true;
|
122
122
|
Observable.Interval(TimeSpan.FromSeconds(1))
|
123
|
-
.TakeWhile(
|
123
|
+
.TakeWhile(i => i < time)
|
124
124
|
.Subscribe(DiscountReadingTime, EndReading);
|
125
125
|
}
|
126
126
|
|
127
127
|
// Readメソッドが呼ばれることでUnirxにより走るメソッド
|
128
|
-
void DiscountReadingTime(long
|
128
|
+
void DiscountReadingTime(long eventIndex)
|
129
129
|
{
|
130
|
-
remainingTime.text = ((int)(time - (
|
130
|
+
remainingTime.text = ((int)(time - (eventIndex + 1))).ToString();
|
131
131
|
}
|
132
132
|
|
133
133
|
// Readメソッドから呼ばれるメソッド
|