[ { "level": 1, "acc_exp": 0 }, { "level": 2, "acc_exp": 300 }, { "level": 3, "acc_exp": 1500 }, { "level": 4, "acc_exp": 4200 }, { "level": 5, "acc_exp": 9000 }, { "level": 6, "acc_exp": 16500 }, { "level": 7, "acc_exp": 27300 }, { "level": 8, "acc_exp": 42000 }, { "level": 9, "acc_exp": 61200 }, { "level": 10, "acc_exp": 85500 }, { "level": 11, "acc_exp": 115500 }, { "level": 12, "acc_exp": 151800 }, { "level": 13, "acc_exp": 195000 }, { "level": 14, "acc_exp": 245700 }, { "level": 15, "acc_exp": 304500 }, { "level": 16, "acc_exp": 372000 }, { "level": 17, "acc_exp": 448800 }, { "level": 18, "acc_exp": 535500 }, { "level": 19, "acc_exp": 632700 }, { "level": 20, "acc_exp": 741000 } ]
PlayFab のタイトルデータなどのサーバー上に配置する Json ファイルを Unity へインポートしておいて取得する スクリプタブル・オブジェクトに取り込む
// タイトルデータのクラス [Serializable] public class PlayerLevelMasterData { public int level; public int acc_exp; }
using System; using System.Collections.Generic; using System.Linq; using UnityEngine; public static class PlayerLevelManager { public List<PlayerLevelMasterData> PlayerLevelMasterData = new(); // PlayFab のタイトルデータから取得した Json の情報が代入されている // プレイヤーのexpを受け取って、対応するレベルを返すメソッド public static int GetLevelFromExp(int exp) { // PlayerLevelMasterDataが空の場合の処理 if (PlayerLevelMasterData.Count == 0) { // エラーまたはデフォルトのレベルを返すなど、適切な処理を行います。 return 0; // 例えば0をデフォルトのレベルとして返すことにします。 } int resultLevel = 0; // デフォルトのレベル // PlayerLevelMasterDataを順番に確認 foreach (var levelData in PlayerLevelMasterData) { // 現在のデータのacc_expがexp以下であるか確認 if (exp >= levelData.acc_exp) { // 現在のデータのlevelを結果として保存 resultLevel = levelData.level; } else { // expがデータよりも小さくなった時点でループを終了 break; } } return resultLevel; // 最終的な結果のレベルを返す } }
using UnityEngine; public class Player : MonoBehaviour { public int playerLevel; public int playerExp; void Update() { if(Input,GetKeyDown(KeyCode.Space)){ UpdateLevel(); } } void UpdateLevel() { // プレイヤーのexpからレベルを取得 playerLevel = PlayerLevelManager.GetLevelFromExp(playerExp); // 取得したレベルを表示 Debug.Log($"Player Exp: {playerExp}, Player Level: {playerLevel}"); } }
public int GetLevelFromExp(int exp) { var levelData = PcharLevelMasterData.LastOrDefault(data => exp >= data.acc_exp); return levelData != null ? levelData.level : PcharLevelMasterData.First().level; }