CSVファイルでエネミーのパラメーターを変更してみる
Enemyのステータスはスプレッドシートにまとめたい。
- モンスターを大量に作っていると、どのモンスターがどのくらいのステータスだったかとかわからなくなってしまう.
- チーム開発ではゲームバランスを整える人とプログラムを書く人が別々のこともありそうなのでデータをエクセルで管理できるようにしたい.
データ
キャラクターの名前とHP,SPEEDのみが格納されています。
コード
利用するクラス
ReadCSV.cs
csvファイルを読み込み、Dictionaryに値を格納していきます。また、そのデータを返す関数を一つ用意
Monster.cs
モンスターの挙動が代わることをチェックするクラス。
1. monsterの移動スピードの変更 1. HP,NAME,SPEEDをテクスチャとして表示
MonsterManager
Monsterを管理するクラス.
1. モンスターの生成やcsvから生成 1. monsterのパラメーターをmonsterにセットします
ReadCSV.cs
Dictionary<string, Dictionary<string, string>> NameDic = new Dictionary<string, Dictionary<string, string>>(); public ReadCSV(string test) { int csvNumberLines = 0; TextAsset csvFile = Resources.Load("CSV/"+test) as TextAsset; StringReader reader = new StringReader(csvFile.text); List<string[]> lisString = new List<string[]>(); while (reader.Peek() > -1) { string line = reader.ReadLine(); lisString.Add(line.Split(',')); SetDictionary(csvNumberLines,lisString); csvNumberLines++; } } void SetDictionary(int csvNumberLines,List<string[]> lisString) { Dictionary<string, string> dic = new Dictionary<string, string>(); var NAME = lisString[csvNumberLines][0]; var HP = lisString[csvNumberLines][1]; var SPEED = lisString[csvNumberLines][2]; dic.Add(lisString[0][0], NAME); dic.Add(lisString[0][1], HP); dic.Add(lisString[0][2], SPEED); NameDic.Add(NAME, dic); } //csvをDictionaryに変換したMonsterDataを返します public Dictionary<string,string> GetMonsterData(string monsterName) { var MonsterDic = NameDic[monsterName]; return MonsterDic; }
Monster.cs
float maxSpeed = 0.0f; float speed = 0.0f; void Update () { transform.Translate(new Vector3(speed/10, 0.0f, 0.0f)); } public void SetStates(Dictionary<string,string> states){ Debug.Log(states["HP"]); Debug.Log(states["SPEED"]); speed = float.Parse(states["SPEED"]); this.GetComponent<TextMesh>().text = states["NAME"]+"\nSPEED:"+states["SPEED"]+"\nHP:"+states["HP"]; }
MonsterManager
public GameObject[] enemy; ReadCSV csv; float timeOut; float timeElapsed; void Awake() { timeOut = 5.0f; csv = new ReadCSV("test"); } void Update() { timeElapsed += Time.deltaTime; if (timeElapsed >= timeOut) { Debug.Log("huga"); GameObject monster = Instantiate(enemy[0], new Vector3(0.0f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f, 0.0f)) as GameObject; monster.GetComponent<Monster>().SetStates(csv.GetMonsterData("ELEPHANT")); monster = Instantiate(enemy[1], new Vector3(0.0f, 0.0f, 0.0f), new Quaternion(0.0f, 0.0f, 0.0f, 0.0f)) as GameObject; monster.GetComponent<Monster>().SetStates(csv.GetMonsterData("RABBIT")); timeElapsed = 0.0f; } }
コードの流れ
- MonsterManagerが読み取りたいcsvファイルを指定
- CSVファイルを読み込んでDicに格納
- MonsterManagerが取得したいMonsterDateを指定
- MonsterDateを元にMonsterを生成。