public void Start()
        {
            this.UpdateAsObservable()
            .First(_ => Input.anyKeyDown)
            .Subscribe(_ => system.TalkStart(TalkMessageReader.GetTalkData(Csv)));

            system.EventStartAsObservable().Subscribe(_ => Debug.Log("Eventstart"));
            system.EventDoneAsObservable().Subscribe(_ => Debug.Log("EventDone"));
        }
        private void Start()
        {
            _TalkSystem.EventStartAsObservable().Subscribe(_ => _State.Value = StageState.Talk);

            //TODO:ゲームステージの終了検知を入れないとだめかも?
            _TalkSystem.EventDoneAsObservable()
            .Where(data => data.Message != _EscapeTalkAsset.Message.Last().Message &&
                   data.Message != _ClearTalkAsset.Message.Last().Message)
            .Subscribe(_ =>
            {
                EnemySpawnerManager.StartProcess();
                _State.Value = StageState.Play;
                TimeManager.EnemyTimeScale = 1.0f;
                TimeManager.TimeScale      = 1.0f;
            })
            .AddTo(this);

            _TalkSystem.EventDoneAsObservable()
            .First(data => data.Message == _ClearTalkAsset.Message.Last().Message)
            .Subscribe(_ =>
            {
                FadeInOut.Instance.OnFadeCompleteAsObservable()
                .First(fade => fade == Fade.Out)
                .Subscribe(__ =>
                {
                    AudioManager.Instance.ChangeMusic(null);
                    _ClearGraphic.gameObject.SetActive(true);
                    FadeInOut.Instance.OnFadeCompleteAsObservable()
                    .First(fade => fade == Fade.In)
                    .Subscribe(r =>
                    {
                        SceneOverValueHolder.ScoreValue = _Score.ScoreValue.Value;
                        this.UpdateAsObservable()
                        .First(___ => Input.GetButtonDown(Constants.ButtonName.Shot))
                        .Subscribe(rr => SceneChanger.SceneChange(SceneType.Result));
                    });
                    FadeInOut.Instance.FadeIn(1f);
                });
                FadeInOut.Instance.FadeOut(1f);
            }).AddTo(this);

            _TalkSystem.EventDoneAsObservable()
            .Where(data => data.Message == _EscapeTalkAsset.Message.Last().Message)
            .First()
            .Subscribe(_ =>
            {
                SceneOverValueHolder.ScoreValue     = _Score.ScoreValue.Value;
                SceneOverValueHolder.StageClearTime = _StageDeltaTime;
                SceneChanger.SceneChange(SceneType.Result);
            }).AddTo(this);

            //ポーズ処理
            _State.Where(state => state == StageState.Play)
            .Subscribe(_ =>
            {
                GameManager.Player.CanControl = true;

                this.UpdateAsObservable()
                .Where(__ => _State.Value == StageState.Play)
                .Where(__ => Input.GetButtonDown(ButtonName.Pause))
                .First()
                .Subscribe(__ =>
                {
                    TimeManager.Pause();
                    _State.Value = StageState.Pause;
                });
            }).AddTo(this);

            //ポーズ解除処理
            _State.Where(state => state == StageState.Pause)
            .Subscribe(_ =>
            {
                this.UpdateAsObservable()
                .Where(__ => Input.GetButtonDown(ButtonName.Pause))
                .TakeUntil(_State.Where(state => state == StageState.Play))
                .First()
                .Subscribe(__ =>
                {
                    TimeManager.PauseRelease();
                    _State.Value = StageState.Play;
                });
            }).AddTo(this);

            _State.Where(state => state == StageState.Pause)
            .Subscribe(_ => AudioManager.SoundEmitter.PlaySE(_PauseSound)).AddTo(this);
            _State.Where(state => state == StageState.Talk)
            .Subscribe(_ =>
            {
                EnemySpawnerManager.StopProcess();
                GameManager.Player.CanControl = false;
                TimeManager.TimeScale         = 1.0f;
                TimeManager.EnemyTimeScale    = 0.0f;
            }).AddTo(this);

            //ボスポップ時の処理
            var spawnObservable = _EnemySpawner.Select(manager => manager.EnemySpawnAsObservable());

            /*	Observable.Merge (spawnObservable)
             *              .Where (enemy => enemy.tag == "Boss")
             *              .Subscribe (boss =>
             *              {
             *                      boss.OnDestroyAsObservable().Throttle(TimeSpan.FromSeconds(2))
             *                      .Subscribe(_ =>
             *                      {
             *                              SceneOverValueHolder.ScoreValue = _Score.ScoreValue.Value;
             *                              SceneOverValueHolder.StageClearTime = _StageDeltaTime;
             *                              SceneChanger.SceneChange (SceneType.Result);
             *                      });
             *                      UnityEngine.Debug.Log ("bossPop",gameObject);
             *              });*/

            this.UpdateAsObservable()
            .Where(_ => _State.Value == StageState.Play)
            .Subscribe(_ => _StageDeltaTime += TimeManager.DeltaTime);

            this.OnDestroyAsObservable()
            .Subscribe(_ =>
            {
                if (_State.Value == StageState.Pause)
                {
                    TimeManager.PauseRelease();
                }
            });

            GameManager.Player.Controller.LifeController.DeadAsObservable
            .Subscribe(_ =>
            {
                TimeManager.TimeScale      = 1.0f;
                TimeManager.EnemyTimeScale = 0.0f;
                EnemySpawnerManager.StopProcess();
            }).AddTo(this);
        }