protected virtual void Start() { // 登録済みの GameObject にアタッチされている全ての IObservableStartMonoBehaviour Component から登録 this.PreStartGameObjectList.SelectMany(x => x.GetComponents <IObservableStartMonoBehaviour>()).ToList().ForEach(x => this.OnStartObservableList.Add(x.OnStartAsObservable())); // 登録済みの ObservableLifecycleMonoBehaviour Component から登録 this.PreStartComponentList.ForEach(x => this.OnStartObservableList.Add(x.OnStartAsObservable())); // 全ての先読み MonoBehaviour の Start() 呼び出しが完了したら処理を行う this.OnStartObservableList .WhenAll() .Subscribe( (_) => { this.OnStart(); Started.OnNext(this); Started.OnCompleted(); } ); }