昔のサンプルコードでIObservableが読み込めなくなる場合の対処法
問題
UniRx勉強中で,昔の参加したこちらのハンズオンの復習をしているところでした.
クローンして実際に開いてみるといくつかのコードでIObservableが読み込めないというエラーがでます.
using UnityEngine; using UniRx; namespace UniRxHandsOn.Lesson_01_Answer.Better { public class SubjectSample : MonoBehaviour { // Subjectの定義 private Subject<int> m_Subject = new Subject<int>(); // Subjectのうち、IObservableのIFだけ外部に公開することで、 // 必要な機能を安全に公開することができる public IObservable<int> OnValueChanged { get { return m_Subject; } } private void Start() { // イベントの発火処理 m_Subject.OnNext(1); m_Subject.OnNext(2); m_Subject.OnNext(3); } } }
対策
using System;
を追加するだけで解決.
using System; using UnityEngine; using UniRx; namespace UniRxHandsOn.Lesson_01_Answer.Better { public class SubjectSample : MonoBehaviour { // Subjectの定義 private Subject<int> m_Subject = new Subject<int>(); // Subjectのうち、IObservableのIFだけ外部に公開することで、 // 必要な機能を安全に公開することができる public IObservable<int> OnValueChanged { get { return m_Subject; } } private void Start() { // イベントの発火処理 m_Subject.OnNext(1); m_Subject.OnNext(2); m_Subject.OnNext(3); } } }
このハンズオン資料は2018年当時のものですが,その時に比べて.NETバージョンが今では新しい. この場合はSystemの方のIObservableを使わないといけない. docs.microsoft.com
こちらのqiita記事のコメントを見て知りました. qiita.com
おまけ
ForkしてUnity2019.3対応化しました.
例のGUITextureをImageに変えたり,GUITextをTextに変えたりしたのも含めてます.