void Awake() { _currentPlayerParameter = new ReactiveProperty <PlayerParameters>(DefaultPlayerParameter); cameraMultiTarget = GetComponent <CameraMultiTargetObjective>(); _onInitializeAsyncSubject.Subscribe(_ => { IsAlive.Where(x => x).Skip(1) .Subscribe(__ => { //生き返ったら座標を書き換える var p = _respawnPoints[UnityEngine.Random.Range(0, _respawnPoints.Length)]; transform.position = p; }); //画面外に出たら死ぬ this.ObserveEveryValueChanged(x => x.transform.position.y) .Where(x => x < -3 && this.IsAlive.Value) .Subscribe(__ => Kill(NonPlayerAttacker.Default)) .AddTo(this); //ダメージを受けたら誰からのダメージか記憶する OnDamaged .Do(x => _lastDamagedAttacker = x.Attacker) .Throttle(TimeSpan.FromSeconds(3)) .Subscribe(__ => _lastDamagedAttacker = null); IsAlive.Subscribe(x => cameraMultiTarget.EnableTracking = x); //死んだ OnDead .Subscribe(__ => { //死んだら4秒後に復活 Observable.Timer(TimeSpan.FromSeconds(2)) .Subscribe(___ => _isAlive.Value = true); }); this.OnTriggerEnterAsObservable() .Where(__ => IsAlive.Value) .Subscribe(x => { var i = x.GetComponent <ItemBase>(); if (i != null) { _pickUpItemSubject.OnNext(i.ItemEffect); i.PickedUp(); } }); this.OnTriggerEnterAsObservable() .Where(__ => IsAlive.Value) .Subscribe(x => { var i = x.GetComponent <ItemBase>(); if (i != null) { _pickUpItemSubject.OnNext(i.ItemEffect); i.PickedUp(); } }); }); }