[StarChaser] 로그라이크 게임 프로젝트

[유니티/C#] DataTable의 모든 행 읽어오기

진서박 2023. 5. 26. 23:45
반응형

원래는 간단한 테이블만 사용해서, 코드도 간단하게 만들어서 사용하고 있었다.

그런데 게임 기획이 바뀌고 데이터를 저장해야할 일이 많아져서, 기존에 사용하던 코드로 작업을 진행했다가는 돌이킬 수 없을것 같은 예감이 들었다.

원래 사용하던 코드. 데이터 양이 적어서 대충 가져와 할당 해주었다.

 

기획이 개편되면서 만들어진 새로운 csv 데이터 테이블

 

아래에는 개편된 코드를 대략적으로 적어보려고 한다.

 

우선, 스킬들을 관리하기 위한 클래스를 작성했다.

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의 자료구조에 더 익숙해질 필요가 있는 것 같다.

반응형