void tap() { // タップのタイミングが、Timerとどれくらいずれているかを検証。近さに応じてBAD/GOOD/GREAT/EXCELLENTの4段階評価を表示する // タップしたときのTimerの値を取得し、近さに応じて評価を出す TIMING tapResult = _timeCtrl.getTapResult(); // コンボかどうかをカウントする if (tapResult == TIMING.EXCELLENT || tapResult == TIMING.GREAT) { comboCount++; } else { // コンボ失敗なら、最大コンボかチェック checkMaxCombo(); comboCount = 0; } // タップ演出 if (display_mode == DISPLAY_MODE.CIRCLE) { iTween.ScaleFrom(_targetCircle, Vector3.one * TARGET_CIRCLE_SCALE_AMOUNT, SCALE_TIME); } else { iTween.ScaleFrom(_cubeTarget, _cubeTargetScale * TARGET_CUBE_SCALE_AMOUNT, SCALE_TIME); } // 評価による処理振り分け showTapResult(tapResult); }
void showTapResult(TIMING pTapResult) { string resultText = ""; int seNumber = Const.SE_HAT_BAD; int addScore = 0; float asc = 0.0f; // コンボ加算用float // 遅すぎか早すぎか判定し、早すぎなら << 遅すぎなら >> と表示する。 bool isSlow = (_timeCtrl.getLastDifference() > 0); string slowSign = "<<"; if (isSlow) { slowSign = ">>"; } switch (pTapResult) { case TIMING.PERFECT: resultText = "PERFECT!"; asc = getComboBonus(SCORE_VAL_PERFECT); seNumber = Const.SE_HAT_EXCELLENT; break; case TIMING.EXCELLENT: resultText = "EXCELLENT!"; asc = getComboBonus(SCORE_VAL_PERFECT); seNumber = Const.SE_HAT_EXCELLENT; break; case TIMING.GREAT: resultText = "GREAT!"; asc = getComboBonus(SCORE_VAL_PERFECT); seNumber = Const.SE_HAT_GREAT; break; case TIMING.GOOD: resultText = "GOOD!"; addScore += SCORE_VAL_GOOD; seNumber = Const.SE_HAT_GOOD; break; case TIMING.BAD: resultText = "BAD!"; seNumber = Const.SE_HAT_BAD; addScore += SCORE_VAL_BAD; break; } //評価によって音を変えて鳴らす _audioCtrl.PlaySE(seNumber); // 表記テキストの装飾 if (isSlow) { resultText = resultText + slowSign; } else { resultText = slowSign + resultText; } // GREAT以上であればコンボ表記・エフェクト発生・コンボボーナス if (pTapResult == TIMING.PERFECT || pTapResult == TIMING.EXCELLENT || pTapResult == TIMING.GREAT) { resultText += "\n" + comboCount + " COMBO!"; _effectCtrl.showEffect(); addScore += Mathf.RoundToInt(asc); } // スコア加算 score += addScore; _tapResultText.text = resultText; _ScoreText.text = "S:" + score; iTween.ScaleFrom(_tapResultText.gameObject, Vector3.one * RESULT_TEXT_SCALE_AMOUNT, SCALE_TIME); // プレイヤーのPPTの値から敵に与えるダメージを算出 float point = (float)addScore / 100 * _playerCtrl.getPPT(); sendPointToEnemy(point); }