728x90
오늘의 문제 상황
문제 원인
JsonUtility가 Dictionary나 Struct 구조를 직렬화(Serialize)하지 못해 생긴 일
해결 방법
Package Manager에서 Newtonsoft.Json 패키지를 설치한다.
Dictionary 자료 구조의 경우 Seriealizable 하지 않기 때문에 직렬화를 하려면 다른 방법을 찾아서 여러 복잡한 처리를 해주어야만 한다. 그러나 ‘플레이어 이름 - 최고 기록’ 정보만 묶어서 같이 저장하면 어떤 데이터 형식이든 상관은 없기 때문에 굳이 Dictionary 자료형을 쓸 필요가 없다. 따라서, saveRankingData 클래스의 내부 데이터 형식을 List<RankingData> 형식으로 변경했다. 여기서 RankingData는 플레이어 이름과 최고 기록 정보를 저장하는 클래스이다.
[System.Serializable]
public class SaveRankingData
{
public List<RankingData> ranking = new List<RankingData>(5);
}
[System.Serializable]
public class RankingData
{
public string name;
public float bestScore;
}
추가로 알게 된 사실
이벤트 추가할 때 Action을 쓰는 이유
위에 델리게이트 선언하는 부분을 생략하기 위해
public event Action<Vector 2> OnMoveEvent;
public delegate void MoveDelegateFunc(Vector 2 moveVector);
public event MoveDelegateFunc OnMoveEvent;
위 두 코드는 용례가 같다.
<> 안에는 제너릭인데 매개변수의 타입이라 생각하면 쉽다.
결국은 델리게이트는 여러함수 묶어서 사용하기 쌉가능이라
옵저버 패턴에서 많이 쓰이는 듯 하다
Nullable을 실행할 때는 ? 뒤에 Invoke를 붙여서 실행한다.
아래 두 코드도 같은 의미이다.
if(action != null)
action();
action?.Invoke();
728x90
'TIL(Today I Learned)' 카테고리의 다른 글
C# 메모리의 작동 방식(구조체와 클래스의 차이) - TIL#29 (0) | 2024.02.01 |
---|---|
Unity 팀 프로젝트(2) : 발표와 회고 - TIL#28 (4) | 2024.01.31 |
Unity 팀 프로젝트 : Invoke의 사용법, BPM 계산 - TIL#26 (0) | 2024.01.29 |
Unity 팀 프로젝트 : 카메라 줌 인/아웃, 플레이어 HP UI 만들기 - TIL#25 (0) | 2024.01.26 |
Unity 팀 프로젝트 : 카메라 회전과 기울임 기능 추가하기 - TIL#24 (0) | 2024.01.25 |