03
29

유니티 에셋스토어 링크

https://assetstore.unity.com/packages/tools/input-management/easy-save-the-complete-save-load-asset-768?aid=1101l7zGS

 

Easy Save - The Complete Save & Load Asset | 입출력 관리 | Unity Asset Store

Get the Easy Save - The Complete Save & Load Asset package from Moodkie and speed up your game development process. Find this & other 입출력 관리 options on the Unity Asset Store.

assetstore.unity.com

 

가격

69달러

 

어떤 에셋인가요?

유니티에서 각종 자료형 or 커스텀 클래스를 손쉽게 저장할 수 있다.

(간단한 암호화도 지원한다.)

 

개인 평가

유니티 개발자 사이에서는 많이 알려져있고 많이 사용되어 안전성은 보장되어있다!

저장 관련 코드를 직접 짜는건 굉장히 귀찮은 반복 작업인데, 시간을 절약 가능.

 

주의할 점?

1. 기본형 클래스가 아닌 클래스를 통으로 저장할 때는, EasySave 옵션에서 해당 클래스에 대한 세팅값을 켜줘야 한다.

2. 해당 클래스의 멤버의 이름이나 개수가 바뀐 경우에는 다시 한번 설정하는 것을 잊지 말자.

 

EasySave 간단 정리

 - Class, Struct 등 어떤 것이든 저장할 수 있습니다!

 - Save / Load 코드를 직접 구현한다면 꽤나 시간 걸리는 작업인데 시간을 아낄 수 있습니다.

 - 암호화를 지원합니다! (json형태로 저장되기 때문에 이게 없다면 노출되는 정보)

 

ES3 Auto Save?

패키지를 임포트한 뒤에는 오토 세이브 기능을 사용하지 않는다면 옵션에서 설정 해제할 것을 추천한다.

(일반적인 게임에서는 사용되지 않습니다.)

 

Window-EasySave3-Settings-EditorSettings의 AutoAddManagerToScene 을 체크 해제하자.

플레이 모드가 되면 자동으로 씬을 오토 세이브하는 EasySave3 Manager를 생성하지 않게 한다.

 

 

EasySave에서 세이브 & 로드

[ 세이브 ]

int targetFrame = 0;
ES3.Save<int>("targetFrame", targetFrame);

 

[ 로드 ]

int targetFrame = ES3.Load<int>("targetFrame");
if (ES3.KeyExists("volumeSFX") == false)
{
    // 데이터가 존재하지않는다! 초기화함수 호출하자
}

- 로드시 미리 ES3.KeyExists() 함수를 통해 키값이 존재하는지 여부를 확인 한 뒤 로드하는 것이 안전하다. 

 

 

로드 시 디폴트 값 설정하기

 로드할 때 두 번째 인자로 해당 키 값이 존재하지 않을 때 로드될 Default 값이 추가되었다. Default 값을 써줄 경우 자료형을 생략 가능하다.

volumeSFX = ES3.Load("volumeSFX", 1f); 
language = ES3.Load("language", Language.Korean);
push = ES3.Load<bool>("push", true);

 

디폴트 값을 사용 할 경우 string 자료형에 주의가 필요하다.

ES3.Load<string>( string 키값, string 파일명 ); 으로 들어가기 때문!!!

string lemtp = ES3.Load<string>("Key_string", "default????"); // 두번째 인자는 디폴트값이 아니다!

 

따라서 디폴트 값만 쓰고 싶다면 아래와 같이 써줘야 한다.

string lemtp = ES3.Load<string>("Key_string", defaultValue:"default");

 

저장 & 로드 시 파일 분산하기

데이터 저장 파일을 분리하고 싶다면 파일 경로를 넘겨주면 된다.

// ES3.Load( 키값, 파일명, 디폴트 값 );
volumeSFX = ES3.Load("volumeSFX", "option.es3", 1f); 
language = ES3.Load("language", "option.es3", Language.Korean);
// ES3.Save( 키값, 저장 변수, 파일명 );
ES3.Save<float>("volumeSFX", volumeSFX, "option.es3");
ES3.Save<Language>("language", language, "option.es3");

 

지원하지 않는 자료형 저장하기

지원하지 않는 자료형 ( 사용자가 만든 클래스, 유니티에서 만든 클래스 중 일부 : Vector2Int 등) 을

저장하기 위해서 Window - EasySave3 - Types 에서 자료형을 검색한 뒤, Fields와 Properties를 전부 체크하고

Create 눌러주면 스크립트를 생성하는데,

자료형을 저장할 때 ES3에서 해당 자료형은 생성된 스크립트를 참고하여 저장한다. 

Type만 지정해두면 세이브나 로드할 때 일반 자료형과 동일하게 쓰면 된다.

 

참고로 Queue<T> 도 설정을 하지 않으면 지원하지 않는 자료형이다. 주의할 것.

 

 

 

-------------------------------------------------------------------------------------------------------

2021.06.01 추가

-------------------------------------------------------------------------------------------------------

 

EasySave에는 두가지 저장 방법이 존재합니다.
일반적으로 알려진 ES3 저장방식은 ES3 클래스를 사용한 방식이지만,

ES3File클래스를 통해 저장하면 더 뛰어난 성능을 보입니다.

 

1. ES3 클래스를 사용한 저장

- ES3.Save<T>로 바로 저장

ES3.Save<string>(key, data);

별도의 객체 없이 정적 함수로 바로 저장할 수 있다.
함수를 한번 호출할때마다 파일을 쓰기때문에 수많은 키들을 한번에 쓴다면 비용이 커서 프레임 드랍이 발생한다!

 

2. ES3File 클래스를 사용한 저장

- ES3File.Save<T>로 메모리에 올리고 ES3File.Sync()로 저장소와 동기화

ES3File _es3File = new ES3File(filePath, es3Settings);
_es3File.Save<string>(key, data);
_es3File.Sync();

파일을 메모리에 보관하고 Sync 메서드가 호출 될 때만 저장소에 변경 사항을 커밋하기 때문에 데이터를 즉시 저장소에 저장하는 ES3.Save 및 ES3.Load 메서드 보다 향상된 성능을 제공합니다 .

 

 

 

COMMENT