レベルアップ用の経験値テーブルのデータを別に作るといい感じですね!
やり方は色々ありますが、Scriptable Objectっていう仕組みを使うと作りやすいです!
https://ekulabo.com/about-scriptable-object
https://gametukurikata.com/program/scriptableobjectitemdatabase
例えば超シンプルに作るならこんな感じですかね?
C#
1using System.Collections.Generic;
2using UnityEngine;
3
4[CreateAssetMenu(fileName = "PlayerExpTable", menuName = "PlayerExpTable")]
5public class PlayerExpTable : ScriptableObject
6{
7 // レベルアップに必要な経験値クラス(PlayerExpTableData)を格納するリスト
8 public List<PlayerExpTableData> m_playerExpTableData = new List<PlayerExpTableData>();
9
10 // レベルアップ関数 引数は現在のプレイヤーのレベルと所持経験値
11 public int SetPlayerLevel(int playerLevel, int playerExp)
12 {
13 // プレイヤーの所持経験値が次のレベルの経験値を超えていたら1レベルアップ
14 if (playerExp >= m_playerExpTableData[playerLevel].m_exp)
15 {
16 return playerLevel + 1;
17 }
18 // じゃない場合はレベルアップしない
19 return playerLevel;
20 }
21}
22
23//Inspector表示用アトリビュート
24[System.Serializable]
25// レベルアップに必要な経験値を格納するクラス
26public class PlayerExpTableData
27{
28 public int m_level;
29 public int m_exp;
30}
で!
あとはこのScriptable ObjectをPublicとかでPlayerに持たせて、経験値計算が終わったあとにSetPlayerLevelを呼ぶとかどうでしょう?
C#
1lv = PlayerExpTable.SetPlayerLevel(lv, exp);
考えどころとしては、この仕様だとはぐれメタルを狩っても連続レベルアップせず、絶対に1しかレベルが上がらないってところですね!
そうしたい場合は、適正レベルになるまで判定を繰り返す…とか、途中のレベルをスキップして一気にレベルアップしちゃう…とかそういう処理をいい感じに考えてみてください!
あ、これ仮にレベル999までテーブルを作りたい場合、項目は全部手打ちしてかないといけないです!w
なのでデカめのテーブルだとExcelで作ってそれをScriptable Objectに変換したりするんですけど、流石にそこまでだとちょっとここに書ききれない量になってしまうのですみません!
Assetとか記事とかあると思うので調べてみてください!