private void OnTriggerStay(Collider other) { if (other.tag != "DanceRange") { return; } // 既に他のプレイヤーのダンスを視聴している場合無視する if (_isViewingInDance) { return; } Dance playerDance = other.gameObject.GetComponent <Dance>(); // プレイヤーがダンス中であれば、視聴する if (playerDance.IsPlaying) { Debug.Log(_instanceID.ToString() + "番のモブは視聴するドン!"); // モブ停止イベント実行 onDanceWatchMob?.Invoke(); // ダンス視聴中エフェクト再生 _danceNowEffect = ParticleManager.Play("DanceNow", new Vector3(), transform); _isViewingInDance = true; // ダンス終了イベントにメソッドを登録する playerDance.onEndDance += (isCancel, isSuccess) => { _isViewingInDance = false; if (!isCancel) { // モブキャラ管理クラスにスコア変更を通知 _mobManager.OnScoreChange(); // ファンタイプが変更したかチェックする Define.PlayerType newFunType = isSuccess ? playerDance.Player.Type : Define.PlayerType.None; if (_funType != newFunType) { // ファンタイプの更新 _funType = newFunType; // 推しているプレイヤーの更新 _funPlayer = playerDance.Player; // 追従対象の更新 _fllowTarget = playerDance.PlayerType; // アウトラインの更新 _meshRenderer.materials[1].color = playerDance.Player.PlayerColor; } } // プレイヤーが客引き状態の場合、追従判定を行う if (_mobManager.GetFunCount(_fllowTarget) < _mobManager.GetFunCount(playerDance.PlayerType) || _fllowTarget == Define.PlayerType.None) { if (FunType == Define.PlayerType.None) { // 追従対象の更新 _fllowTarget = playerDance.PlayerType; } } // モブ再生イベント実行 onMoveMob?.Invoke(); Destroy(_danceNowEffect); }; } else { // プレイヤーが客引き状態の場合、追従判定を行う if (_mobManager.GetFunCount(_fllowTarget) < _mobManager.GetFunCount(playerDance.PlayerType) || _fllowTarget == Define.PlayerType.None) { if (FunType != Define.PlayerType.None) { return; } _fllowTarget = playerDance.PlayerType; onChangeFllowPlayer?.Invoke(); } } }