質問: ### Scoreに応じたA~Dみたいなランクのステージごとの付け方のやりかたがわかりません。 こんちには。UE4でサードパーソンのゲームを作っているのですが、 どういうふうスコアを判定してA~Dみたいな感じにすればいいのかがわかりません。 スコアはGameInstanceに作ってあります。 そして一応そういう処理を書いているのですが、長くなってしまいます。 それからステージごとにそういうものを作るときはどうすればできますか? わかりにくかったら教えてください。 下は処理の内容です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d7e9e7bb853d7e51447a16ce57ed7049.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/6fe5fc1675e9970a66b40c64c55fb7ce.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/95f63942049fe47a7af8a01a4a2a2302.png) ### 回答を受けて 回答していただいた方のデータテーブルというものを使わせていただいたのですが。 やり方がおかしいのか処理が長くなってしまいました...これでいいのでしょうか? 一応正常に動きますがもやもやしています。 処理の内容を画像で貼ります。 構造体です。データテーブルを使うにはいるとネットに書いてあったので使いました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/e4e59668f328c7c7f4a43ccdc2d2707a.png) データテーブルです。ランクとそのランクに必要なスコアを書いています。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/643862c0628ab13e0e2b1114f1cba1d8.png) 問題の長くなってしまった処理です。なにかおかしな点があったら教えていただけるとありがたいです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/942bfa97f24d321d8fdb2699ff3d6c7f.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/8ebc1fda55c0574a1f3665b53f0ae1fc.png) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/cd837897ec6a82a3a826673992422531.png) 使われているCheckScoreの関数の中身です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/f397d7b1969d7e303599341dd210cc92.png) SetRankという確定したものをUIに適応するイベントです。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/e9974ed3d1bf56efa36e62af16219d19.png)
回答: ステージ毎にスコアによるランクの値を変動させる場合は 確かに何度も似たような処理を書くのは手間ですし変更に弱いので、いくつか方法はあると思いますが 手軽に出来る方法としてDataTableを用いる方法を提案します DataTableに `nスコア以上だと~ランクになる` という表を用意し、 実際のランク判定時にそのテーブルの上から順に判定を行ってランクを求めるという方法です。 最適解ではないですがわかりやすいですし、ステージ毎にスコアテーブルを作って数値をいじるだけでステージ毎にランクの算出方法を変えれるので便利だと思います。 ### イメージ画像 最終スコアが250だった場合、 ランクCの閾値以上、ランクBの閾値未満なので、最終ランクはCになる。といったイメージです。 !イメージ説明