반응형
원래는 간단한 테이블만 사용해서, 코드도 간단하게 만들어서 사용하고 있었다.
그런데 게임 기획이 바뀌고 데이터를 저장해야할 일이 많아져서, 기존에 사용하던 코드로 작업을 진행했다가는 돌이킬 수 없을것 같은 예감이 들었다.


아래에는 개편된 코드를 대략적으로 적어보려고 한다.
우선, 스킬들을 관리하기 위한 클래스를 작성했다.
public class Skill
{
public int Skill_ID { get; set; }
public int GodID { get; set; }
public string SkillName { get; set; }
public int SkillLevel { get; set; }
public int SkillGroupID { get; set; }
public int PriorSkillID { get; set; }
public int SkillType { get; set; }
public int ReqWeaponType { get; set; }
public int ReqPlayerState { get; set; }
public int CoolTime { get; set; }
public float Option { get; set; }
public int OptionType { get; set; }
public int MaxStackCount { get; set; }
public string Icon { get; set; }
public string Description { get; set; }
public Skill(int skillID, int godID, string skillName, int skillLevel, int skillGroupID, int priorSkillID,
int skillType, int reqWeaponType, int reqPlayerState, int coolTime, float option, int optionType,
int maxStackCount, string icon, string description)
{
Skill_ID = skillID;
GodID = godID;
SkillName = skillName;
SkillLevel = skillLevel;
SkillGroupID = skillGroupID;
PriorSkillID = priorSkillID;
SkillType = skillType;
ReqWeaponType = reqWeaponType;
ReqPlayerState = reqPlayerState;
CoolTime = coolTime;
Option = option;
OptionType = optionType;
MaxStackCount = maxStackCount;
Icon = icon;
Description = description;
}
}
그런 다음 Skill 클래스의 모든 항목들을 csv파일을 읽어와 행별로 초기화를 하고 List<Skill>에 순서대로 넣어준다
List<Skill> AllSkill = new List<Skill>();
protected override void Start()
{
AllSkill = ReadSkillTable(GameManagers.DataManager.tableDic[ECSVDatas.SkillTable]);
}
public List<Skill> ReadSkillTable(DataTable table)
{
List<Skill> m_list = new List<Skill>();
foreach (DataRow row in GameManagers.DataManager.tableDic[ECSVDatas.SkillTable].Rows)
{
int skillID = int.Parse(row["Skill_ID"].ToString());
int godID = int.Parse(row["GodID"].ToString());
string skillName = row["SkillName"].ToString();
int skillLevel = int.Parse(row["SkillLevel"].ToString());
int skillGroupID = int.Parse(row["SkillGroupID"].ToString());
int priorSkillID = int.Parse(row["PriorSkillID"].ToString());
int skillType = int.Parse(row["SkillType"].ToString());
int reqWeaponType = int.Parse(row["ReqWeaponType"].ToString());
int reqPlayerState = int.Parse(row["ReqPlayerState"].ToString());
int coolTime = int.Parse(row["CoolTime"].ToString());
float option = float.Parse(row["Option"].ToString());
int optionType = int.Parse(row["OptionType"].ToString());
int maxStackCount = int.Parse(row["MaxStackCount"].ToString());
string icon = row["Icon"].ToString();
string description = row["Description"].ToString();
Skill skill = new Skill(skillID, godID, skillName, skillLevel, skillGroupID, priorSkillID, skillType,
reqWeaponType, reqPlayerState, coolTime, option, optionType, maxStackCount,
icon, description);
m_list.Add(skill);
}
return m_list;
}
이렇게 csv의 모든 행들을 가져와 클래스로 관리할 수 있게 되었다.
DataTable의 자료구조에 더 익숙해질 필요가 있는 것 같다.
반응형
'[StarChaser] 로그라이크 게임 프로젝트' 카테고리의 다른 글
[유니티/C#] 퀘스트 시스템 만들기 (0) | 2023.06.09 |
---|---|
[유니티/C#] 데이터를 관리하는 클래스 만들기 (1) | 2023.06.06 |
[유니티/C#] 클래스에서 원하는 조건의 랜덤 항목 뽑아오기 (0) | 2023.05.29 |
[유니티/C#] NavMeshAgent 와 NavMeshObstacle (0) | 2023.05.22 |
[유니티/C#] DataTable로 엑셀 csv파일 읽어오기 (0) | 2023.05.05 |