質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2183閲覧

【UniRx】Observable.FromCoroutineで再度購読する方法について

gimn

総合スコア39

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2021/06/05 05:47

UniRxのFromCoroutineを使用し、コルーチン終了後にSubscribeしている処理を実行するような処理を行いたく、下記のように
コルーチンの実行を行っているのですが、これは一度実行されるとDisposeされてしまい、再度使いまわすようなことができなくなってしまいます。
用途としては複数回使用したいため、コルーチン実行後もDisposeしてほしくないのですが、させない方法などありますでしょうか。
※通常のUnityのコルーチンでは、コルーチンの終了検知にひと手間加えなくてはならず、できればUniRxの機能で実現したい所です。

c#

1// hogeCoroutineの実行終了後、hogeMethodが実行される 2Observable.FromCoroutine(hogeCoroutine) 3 .Subscribe(_ => hogeMethod());

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Observable/UniRxで統一したいのであれば、Repeat系オペレータを利用すれば出来るんじゃないでしょうか。

Repeatとは、書籍「UniRx/UniTask 完全理解」の説明を引用させて頂くと

RepeatはOnCompletedメッセージを受け取った時にSubscribe()をやりなおします。つまり

直前までのObsevableを新しく生成し直して、それをSubscribe()するのと同じ動作を行います。

とあります。

ただし、注意点として(こちらも同書籍から引用)

Repeatを使用する場合の注意点
Repeatを用いるとOnCompleted メッセージで Observable を停止できなくなる

とありますように、Repeat()は無限ループを発生させる可能性があるので、RepeatSafe()RepeatUntilDestory()を利用したほうがいいようです。

参考:【Unity】【UniRx】Repeat系のオペレータまとめ


あるいは単にコルーチンの扱いが面倒なら UniTask によってコルーチンを await 出来るので、そちらを検討してみてはどうでしょう。

UniTask機能紹介 #コルーチンのawait

csharp

1async UniTask DoHogeAsync() 2{ 3 await hogeCoroutine(); 4 hogeMethod(); 5}

投稿2021/06/05 09:36

編集2021/06/05 09:37
tor4kichi

総合スコア763

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gimn

2021/06/06 02:26

tor4kichi様 ご回答いただきありがとうございました。 表記の問題につきまして、私の実装に誤りがあり想定の動作となっていなかったことが判明いたしました。申し訳ございません。 Observable.FromCoroutineは繰り返し呼び出しても再度実行してくれるようでした。 ただ、ご提案いただいた方法で同様の実装が行えるということで大変勉強になりました。 今後の実装にてご参考にさせていただきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問