📕학습 개요

유니티 캠프 13일차.

오늘도 팀 프로젝트에 몰두하느라 시간을 다 썼다. 시간이 참 빠르게 간다…


📖학습 내용

오늘 한 일 정리

  1. 아이템 데이터베이스 기반으로 아이템 리스트 관리
  2. 상점 아이템 정보를 따로 저장(판매 여부 등)
  3. 몬스터 처치 시 아이템 드랍(아이템 드랍 테이블)
  4. 몬스터 처치 시 골드 드랍
  5. 소비, 기타 아이템의 특수성 구현

JSON 파일과 생성자

몬스터의 아이템 드랍 테이블을 사용할 때, JSON에서 잘 들어왓는데도 전부 값이 0으로 들어가는 문제가 생겼다.

해결 방법은 생성자에 있었다. 기본 생성자가 없어서 JsonSerializer가 속성 하나하나 설정하는 것을 못하게 된 것이다. JsonSerializer는 생성자 호출 시 JSON에 나오는 모든 값을 그 생성자 인자로 정확히 일치시켜야만 값을 넣을 수 있기 때문이다.

기본 생성자를 추가하고, 모든 프로퍼티를 초기화시키는 방법이 제일 간단하지만, JsonConstructor 특성을 한번 사용해봤다. 이걸 쓰면 JsonSerializer가 해당 생성자를 강제로 사용한다고 한다.

[JsonConstructor]
        public Monster(int id, string name, int level, int fullHP, int attack, int defense, int expReward, int mesoReward, float critChance, float evadeChance, List<DropTableEntry> drops)

소비, 기타 아이템

소비 아이템과 기타 아이템은 장비 아이템과 다르게 같은 종류의 아이템이 같은 공간에 다수 존재해야 한다. 그리고 모든 객체를 따로 보관하게 되면 수가 많아질 수록 감당하기 어려워진다. 그래서 아이템 개수를 의미하는 필드를 만들어서, 사실상 같은 아이템이 여러 개 있는 것 처럼 보이게 했다.

public int ItemCount { get; private set; } //아이템 개수

다수의 아이템을 한번에 획득하거나 잃게 될 경우, 어차피 모든 소비/기타 아이템은 똑같기 때문에 아이템 개수만 줄여주면 된다.

🏁오늘 배운 핵심 한줄 요약

  • JSON 직렬화가 잘 안될 경우 생성자를 확인해보자.

태그: ,

업데이트:

댓글남기기