void Start() { bModel = new BulletModel(startPosition); bView = CreateBulletView(startPosition); disposables = new CompositeDisposable(); Observable.EveryUpdate() .Subscribe(_ => { bModel.UpdatePosition(1 * Time.deltaTime); }) .AddTo(disposables); bModel.position .ObserveEveryValueChanged(position => position.Value) .Subscribe(posValue => { bView.UpdatePosition(posValue); }) .AddTo(disposables); bView.isCollided .ObserveEveryValueChanged(position => position.Value) .Subscribe(posValue => { bModel.SendDeathNotice(); }) .AddTo(disposables); MessageBroker.Default .Receive <DeathNotice>() .Where(msg => msg.sender == bModel && msg.objectType == SpaceObjectType.bullet) .Subscribe(_ => { SelfDestruct(); }) .AddTo(disposables); MessageBroker.Default .Receive <GameOverNotice>() .Subscribe(msg => { disposables.Dispose(); }) .AddTo(this); }