5. Chart 차트 불러오기
namespace BackendData.Base { }
이름 충돌 방지와 코드의 구조화와 가독성을 높일 수있기때문에
네임 스페이스로 사용합니다.
public abstract class Chart : Normal {}
차트 클래스는 노멀 클래스를 상속하고 있다.
protected abstract void LoadChartDataTemplate(JsonData json);
public abstract string GetChartFileName(); // 각 자식 객체가 설정한 차트 이름을 불러오는 함수
abstract - 추상 메서드임
추상메서드 사용이유
- 다양한 유형의 객체에 공통된 동작이 있을 때
- 인터페이스의 일부 구현을 제공하고 나머지는 하위 클래스에게 위임할 때
- 코드의 일관성을 유지하고 유지보수를 쉽게 할 때
- Chart - 클래스에서는 구현되지 않고 하위 클래스에서 각각의 독자적인 구현이 필요합니다.
위의 내용은 다음에 다룸 backendmanager 코드이다.
일단 이거 부터 할게 아닌거같다.
이걸 알려면
Chart, Normal , InGameUI_Equip , InGameUI_EquipChangePopup
동시에 해야될거같다.
그래도 힘든 와중에 다행인건 연결점 들은 다찾았기 때문에 뭐 부터 할지 정해야됨
item 스크립트 부터 시작
BackendData.Chart.Item
-키워드 : 아이템 차트 내용 선언
public int ItemID { get; private set; }
public string ItemName { get; private set; }
public string ItemType { get; private set; }
public string ItemContent { get; private set; }
public string ImageName { get; private set; }
public Sprite ImageSprite { get; set; }
public Dictionary<string, float> ItemStat { get; private set; }
이런식으로 있는거 다선언해준다.
마찬가지로 itemstat 같은경우에는 어택 파워와 시간초 를 입력 가능하게해준다
-키워드 : 차트내용 json파일로 전달
public Item(JsonData json) {
ItemID = int.Parse(json["ItemID"].ToString());
ItemName = json["ItemName"].ToString();
ItemType = json["ItemType"].ToString();
ItemContent = json["ItemContent"].ToString();
ImageName = json["ImageName"].ToString();
ItemStat = new Dictionary<string, float>();
string itemStatString = json["ItemStat"].ToString();
if (string.IsNullOrEmpty(itemStatString) || itemStatString == "null") {
return;
}
// string이 {"Delay":"0.5","Time":"60"} 와 같을 경우
JsonData dropItemListJson = JsonMapper.ToObject(itemStatString);
var jsonKeys = dropItemListJson.Keys;
foreach (var key in jsonKeys) {
ItemStat.Add(key, float.Parse(dropItemListJson[key].ToString()));
}
}
json 데이터는 JavaScript Object Notation의 약자이다.
앞서 말했던 데이터들을 json 형식으로 만들고
또한itemStatString 이값이 비어 있을경우 또는 반환값이 없다면 리턴해준다.
var jsonKeys = dropItemListJson.Keys; //파싱된 json 데이터의 키를 가져옴
Manager 코드 시작
BackendData.Chart.Item
private readonly Dictionary<int, Item> _dictionary = new ();
private readonly Dictionary<string, Sprite> _itemImages = new ();
public IReadOnlyDictionary<int, Item> Dictionary => (IReadOnlyDictionary<int, Item>)_dictionary.AsReadOnlyCollection();
-키워드 : 오버라이드, 재사용, foreach
protected override void LoadChartDataTemplate(JsonData json) {
foreach (JsonData eachItem in json) {
Item info = new Item(eachItem); // 아이템 클래스의 인스턴스를 info에 할당하는것
_dictionary.Add(info.ItemID, info); // 아이템의 row 정보를 담는다 새로운 인스턴스 info정보로
info.ImageSprite = AddOrGetImageDictionary(_itemImages, "Sprite/Item/", info.ImageName);
// 새로운 이미지 정보로 바꾼다 .
}
}
1 .override 뭔가 대체하다. 바꾸다
선생님이 자기소개서를 쓰라고 말했습니다.
근데 학생마다 자기소개서를 적는 방법이 각기 다를것 아닙니까
그것을 적는것이 오버라이드 라고 합니다.
부모가 정해준것을 그대로 자신만의 방법으로 바꾸는것을 오버라이드라고 하죠
2. foreach 는 json라는 데이터를 eachitem 에 넣어서 어떤 행동을 한다는것이다.
3. 이미지를 찾거나 새로 추가하고, 그 이미지를 info.ImageSprite에 할당하는 역할을 합니다.
이렇게 코드를 작성한 이유는 이미지를 필요할 때마다 로드하는 것이 아니라, 한 번 로드한 이미지는 imageDictionary에 저장해두고 재사용하기 위함입니다. 이렇게 하면 이미지 로드 횟수를 줄일 수 있어 성능 향상에 도움이 됩니다.
public override string GetChartFileName() {
return "itemChart";
}
차트 파일 이름 을 이함수를 통해 얻어 올수있다.
//2023년 11월 25일 18:23 연결점까지
//2023년 11월26일 11:14 manager 코드 적는중