싱글톤 복습

좋은 코드와 아쉬운 코드를 보면서, 어떻게 바꾸면 좋을지에 대해서 이야기해보는 시간을 가져봅시다.

데이터의 저장

열심히 플레이 한 결과가 전부 다 날라가버린다면 그 게임을 하고 싶을까요?

데이터의 저장은 운영되고 있는 게임의 서비스 수명에 직접 영향을 주는 중요한 주제입니다.

직렬화

Untitled

우리가 프로그래밍한 복잡한 객체를 바이트들의 배열로 만들어버리는 작업을 직렬화라고 하며, 모든 클래스를 직렬화할 수 있는 것은 아닙니다.

유니티에서는 아래와 같은 필드들에 대해 직렬화할 수 있다고 정의하고 있습니다.

왜 데이터를 파일에 저장하면 좋을까

switch(characterType){
	case CharacterType.Warrior:
		HP = 40;
		MP = 5;
		DEX = 10;
		
}

Untitled

직렬화 가능 타입

Untitled

⭐ 정리 : Serializable로 전체를 구성하고, 클래스 자체도 Serializable 어트리뷰트를 붙이면 직렬화 가능타입이 됩니다 ⭐

[Serializable]
public class MyClass{
	public int a;
	public int b;
}

[Serializable]
public class MyBigClass{
	public MyClass my;
}

public class myCharacterData{
	// Transform 직접 넣는거 안됨
	public Vector3 position;
	public Quaternion rotation;
}

PlayerPrefs

PlayerPrefs는 게임 세션 간에 플레이어 환경설정을 저장하는 클래스입니다. 이 클래스는 문자열, 실수, 정수 값을 사용자의 플랫폼 레지스트리에 저장할 수 있습니다.

유니티는 암호화하지 않고 로컬 레지스트리에 PlayerPrefs를 저장합니다. 민감한 데이터를 저장하는 데에는 적합하지 않습니다.