
Json으로 기본 데이터 테이블을 구성하고, 이를 Info클래스로 받아서 사용한다.
앞의 Json데이터는 서버가 붙을 경우 서버에서 받아올 수 있다.
이 데이터로 유저가 사용하는 데이터 클래스로 감싸고, 이 묶음을 유저 데이터에서 관리해준다.
그리고 그 유저데이터를 다시 Json으로 구성하여 저장하고 있다.
내가 구성하는 부분은 데이터 테이블 부터 InstanceClass와 로드까지하고, 뒤의 저장하는 부분은 다른 분이 맡아 주셨다.


위는 캐릭터 테이블이고, 아래는 스테이지 테이블이다.
id로 조인하여 사용 할 수 있게 만들어놨다.
이를 json와 info클래스로 변환해주는 프로그램을 사용하여 json과 infoclass로 만들었다.
InstanceClass에서는 Info클래스와 여러 기타 정보를 갖고 있다.
[Serializable]
public class CharacterInstance
{
public int Key;
public int Level;
public int CharacterInfoKey;
[JsonIgnore] public CharacterInfo CharacterInfo { get; private set; }
[JsonIgnore] public SupportSkillInfo SupportSkillInfo { get; private set; }
[JsonIgnore] public CharacterStat CharacterStat { get; private set; }
// public ItemInstance[] EquipedItems;
public void LoadInfos()
{
this.CharacterInfo = Managers.Instance.Data.CharacterLoader.GetByKey(CharacterInfoKey);
SupportSkillInfo = Managers.Instance.Data.SupportSkillLoader.GetByKey(CharacterInfo.SupportSkillID);
}
private void SetCharacterStatBase()
{
CharacterStat = new CharacterStat(CharacterInfo);
}
}
public class CharacterInstanceLoader
{
public List<CharacterInstance> ItemList { get; private set; }
public Dictionary<int, CharacterInstance> ItemDict { get; private set; }
public CharacterInstance GetbyKey(int key)
{
return ItemDict[key];
}
public void LoadInstance(List<CharacterInstance> list)
{
ItemList = list;
for(int i = 0; i < ItemList.Count; i++)
{
ItemList[i].LoadInfos();
}
}
public void SetDict()
{
ItemDict = new Dictionary<int, CharacterInstance>();
for (int i = 0; i < ItemList.Count; i++)
{
ItemDict.Add(ItemList[i].Key, ItemList[i]);
}
}
public CharacterInstance CreateInstance(int key)
{
CharacterInstance item = new CharacterInstance();
item.Key = Utils.CreateId(ItemDict.Keys.ToList<int>());
item.CharacterInfoKey = key;
item.LoadInfos();
item.Level = 1;
return item;
}
public void AddInstance(CharacterInstance item)
{
ItemList.Add(item);
}
}
Infoclass가 갖고 있는 데이터는 JsonIgnore를 붙여서 저장되지 않도록 했다.
Loaderclass를 만들어서 데이터를 불러오고, 새로운 데이터를 저장해야하면, key를 만들고 데이터를 알맞게 초기화 해주는 기능을 만들어주었다. 또한 key로 데이터를 한번에 접근해가져올 수 있도록 했다.
'Develop_Log' 카테고리의 다른 글
[내배캠 최종 프로젝트] 공격 및 공격 범위 표시 (0) | 2024.12.06 |
---|---|
[내배캠 최종 프로젝트] 캐릭터 구현 (0) | 2024.12.04 |
[내배캠 최종 프로젝트] 맵 장애물 구현 (0) | 2024.12.03 |
[ScriptableObject Loader] Excel에서 SO로 만들기 (0) | 2024.11.24 |
[팀플젝 회고] 유니티 심화주차 (0) | 2024.11.22 |