캐릭터 데이터 테이블 만들기

세계관, 스토리가 중요한 게임이 아니기 때문에 개성 강하고 코믹한 캐릭터를 만들고 싶었다.

그래서 콘셉트가 확고한 캐릭터들을 25명 구상하니 이거 만드는 데에만 오랜 시간이 걸렸다.

 

프로필 스프라이트, 스탠딩 스프라이트는 리소스 폴더 내의 주소로 적었다.

ID는 등급 별로 1000씩 차이를 줬는데 이게 문제가 되는 일은 없었으면 좋겠다.

 

 

 

폰트 추가

 

원활한 테스트를 위해 한글이 되는 폰트를 다운로드하였다.

고도체라는 상업적 이용이 가능한 무료 폰트를 사용하였다.

 

 

 

파싱

public struct Character
{
    public string Name;
    public Sprite ProfileSprite;
    public Sprite StandingSprite;
    public Grade Grade;
    public string Description;
    public int ID;

    public Character(string Name, Sprite ProfileSprite, Sprite StandingSprite, Grade Grade, string Description, int ID)
    {
        this.Name = Name;
        this.ProfileSprite = ProfileSprite;
        this.StandingSprite = StandingSprite;
        this.Grade = Grade;
        this.Description = Description;
        this.ID = ID;
    }
}

 

우선 이전의 Character 클래스를 없애고 구조체를 생성하였다.

 

public List<Character> ParseCharacterTable(DataTable table)
{
    List<Character> result = new List<Character>();

    foreach (DataRow row in table.Rows)
    {
        string name = row["Name"].ToString();
        Sprite profileSprite = Resources.Load<Sprite>(row["ProfileSprite"].ToString());
        Sprite standingSprite = Resources.Load<Sprite>(row["StandingSprite"].ToString());
        Grade grade = (Grade)Enum.Parse(typeof(Grade), row["Grade"].ToString());
        string description = row["Description"].ToString();
        int id = int.Parse(row["ID"].ToString());

        Character character = new Character(name, profileSprite, standingSprite, grade, description, id);
        result.Add(character);
    }

    return result;
}

 

파싱 함수도 새로 추가하였다.

 

        private void CreateEmployeesForTest()
        {
            foreach (Character character in DataManager.instance.CharacterList)
            {
                employees.Add(new Employee(character));
            }
        }

 

마지막으로 EmployeePresenter에 임의로 꽂아 넣었던 Character 대신에 데이터매니저를 사용하였다.

 

 

 

Config 씬 추가

여기서 초기화 사이클이 꼬이는 문제가 좀 발생했다.

데이터매니저, 직원프레젠터 둘 다 start에서 초기화를 하였더니 데이터를 로드하기 전에 캐릭터를 가져오려고 시도한 것이다.

 

이는 나중에 데이터 로드하는 로직을 따로 만들어야 문제가 없을 것인데, 우선 메인 씬 시작 전에 컨피그 신을 실행 하도록 하고 거기에 매니저 클래스들을 들이부었다.

 

어쨌든, 데이터 로드에는 시간이 걸리기 때문에 이후 로딩 로직을 만드는 것은 필수불가결하긴 하다.

그리고 지금은 Resources 폴더에서 로드하고 있으나 최대한 이 방식을 사용하고 싶지 않다.

이전에 회사에서 Addressable를 활용해 AWS S3 서버를 이용했었는데 무료로 할 수 있는 방법이 없을까 찾아봐야겠다.

+ Recent posts