TIL(Today I Learned)

Unity 팀 프로젝트 : 버그 찾고 마무리하기 - TIL#27

Najdorf 2024. 1. 30. 23:28
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