Jbutaのブログ

腹だけでた豚のブログ

Unityの動的な点数計算

敵を倒した時に増える点数がカウンターみたいに動的に増やす表現を行っていたのだけれど、ステージのリザルトボーナスを加えると、何故か1面クリアしただけで点数が無限になってしまう問題が発生していた。

 

displayScore【表示されている点数】

Score【実際の点数】

animeSpeedFactor【アニメーションスピード】

 

//スコアを動的に変動

if (displayScore != Score) {
displayScore += Time.deltaTime * animeSpeedFactor * Mathf.Abs(Score - displayScore);

scoreText.text = string.Format("{0:0000}", displayScore);
}

【条件の解説】

表示されている点数が実際の点数と異なる場合

 

//スコアを動的に変動
if (Score > displayScore) {
displayScore += Time.deltaTime * animeSpeedFactor * Mathf.Abs(Score - displayScore);
scoreText.text = string.Format("{0:0000}", displayScore);
}
if (Mathf.Abs(Score - displayScore) < 1.0f)
{ //差の絶対値が1未満の場合は同値とみなす
displayScore = (float)Score;
}

【条件の解説】

実際の点数が表示点数よりも多い場合(点数は基本増えるのみ)

 

【計算式の解説】

1秒×アニメーションスピード×表示されている点数と実際の点差を加算する

 

少数を使わない整数のみをつかう宣言で良いだろうと小数点を放置していたのと、ステージ間のリザルト計算で辻褄が合わなくなったのか、無限に加算するようになっていた模様。

今のところ無限加算はまだ出ていないのでこれでいいのかなと思っているブヒ。

たぶん見る人が見れば馬鹿な問題なんだろうとは思うけど、このミスを解決するのに数日かかってしまうあたり、力不足を感じる。

結果として、こういう点数計算を使ったが、最初は、何がどうなって点数が無限に増えるのか原因がわからなかったところからスタートしたので、特定するのが大変だった。

今までは、【これがわからない】とか言うのがあって、神サイトteratailに質問していたが、これはなんでバグってるかわかりませんとしか聞けなかったのでteratailも使えなかった。

 

同じ問題に直面している人の役に立てれば幸いです。