昔のサンプルコードでIObservableが読み込めなくなる場合の対処法

問題

UniRx勉強中で,昔の参加したこちらのハンズオンの復習をしているところでした.

techcircle.connpass.com

クローンして実際に開いてみるといくつかのコードで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対応化しました.

github.com

例のGUITextureをImageに変えたり,GUITextをTextに変えたりしたのも含めてます.