[유니티 / iOS] iCloud에 SaveData 저장 및 불러오기(Cross Platform Native Plugins)

Posted by Dev Park
2020. 9. 18. 07:48 Unity_iOS

 

게임앱에서 로컬에 저장한 게임세이브 파일을 iCloud에 저장 및 불러오기하는 방법입니다. 

안드로이드는 플레이서비스에서 지원하는 플러그인으로 만들 수 있지만 iCloud는 따로 지원하는 플러그인이 없어서 에셋스토어를 통해 찾아낸 몇가지 유료 에셋 중에 하나를 선택해서 만들었습니다. 

 

제가 사용한 에셋은 Cross Platform Native Plugins - Ultra Pack 이고 가격은 $59.99 입니다.

다른 에셋도 몇가지 있었지만 Cross Platform Native Plugins 을 선택한 이유는 비슷한 가격대에 Cross Platform Native Plugins는 iOS와 안드로이드 둘다 지원이 된다는 점과 저장 기능 외에도 여러가지 기능을 제공해서 입니다. 

 

Cross Platform Native Plugins은 아래 주소에서 확인 할수 있습니다.

assetstore.unity.com/packages/tools/integration/cross-platform-native-plugins-ultra-pack-31086

 

Cross Platform Native Plugins - Ultra Pack | 기능 통합 | Unity Asset Store

Use the Cross Platform Native Plugins - Ultra Pack from Voxel Busters Interactive on your next project. Find this integration tool & more on the Unity Asset Store.

assetstore.unity.com

대충 기능을 보자면 주소록, 청구기능, 클라우드 서비스, 구글 플레이 서비스, 미디어 라이브러리, 알림, 내 앱 평가, 공유 등의 기능을 지원합니다. 

지원하는 모든 기능을 사용하지는 않지만 제가 만든 게임에 사용하는 몇가지 기능들을 이 플러그인로 안드로이드와 iOS 둘다 사용이 가능해서 선택했습니다. 

 

위 기능중에 클라우드 서비스 기능을 사용해서 iCloud에 게임의 저장 데이터를 저장하고 불러오는 기능을 만드는 방법입니다.

 

먼저 에셋을 구입 후 프로젝트에 임포트하면 Window에 Voxel Busters가 보일겁니다. 

Window > Voxel Busters > Native Plugins > Open NPSettings 를 선택합니다. 

Inspector에서 Native Plugins 설정 화면을 볼 수 있습니다. 

처음에는 모든 기능이 체크된 상태인데 사용할 기능만 선택해서 체크한 후 하단의 Save 버튼을 눌러 설정을 저장합니다. 지금은 iCloud에 저장하기를 만들거니까 Uses Cloud Services에 체크합니다.

 

이제 iCloud를 사용하기 위한 설정을 해야 합니다. 

(Certificates, Identifiers & Profiles 설정을 한 적이 없다면 아래 글을 먼저 참고 하시기 바랍니다.)

[유니티 / iOS] 신규 앱 등록하기(Identifiers 생성)

[유니티 / iOS] Certificates / Provisioning Profile 만들기

 

애플 개발자 페이지에 접속해서 Certificates, Identifiers & Profiles 에 Identifiers 오른쪽에 + 버튼을 눌러줍니다. 

 

iCloud Containers 를 선택 후 Continue 

 

Description 과 Identifier 입력 후 Continue. Identifier는 번들ID를 입력해 주면됩니다. 

 

이제 다시 돌아와서 iCloud를 사용할 Identifiers를 선택합니다. 

 

Certificates 에서 iCloud를 체크합니다. 

오른쪽에 Edit 를 눌러서 위에서 만든 Container를 선택해서 활성화합니다. 

 

이제 xCode에서 필요한 설정을 해야 합니다. 

작업할 프로젝트에서 Signing & Capabilities에서  +Capability를 선택합니다. 

 

iCloud를 선택합니다.

 

추가된 iCloud에서 아래 스샷과 같이 체크합니다.

 

이제 필요한 설정은 완료되었고 저장과 불러오기에 사용할 코드를 작성하면 됩니다. 

앱 시작 부분 또는 저장 / 불러오기 이전에 클라우드 서비스를 초기화 해줍니다. 

using VoxelBusters.NativePlugins;
..
..
// cloud services 초기화 
NPBinding.CloudServices.Initialise();

 

저장하기

// Set String
NPBinding.CloudServices.SetString("저장 파일 이름", 저장할 스트링 데이터);

 

불러오기

// Set String
string stringValueOnCloud = NPBinding.CloudServices.GetString("저장 파일 이름");

저는 json을 사용해서 스트링 형식으로 저장을 했는데 스트링 형식 외에도 Bool, Long, Double, String, List, Dictionary 도 가능합니다. 

 

저장한 데이터가 저장되었는지 확인 하려면 NPBinding.CloudServices.Synchronise(); 를 사용해서 확인 할 수 있습니다. 

Synchronise 이벤트는 아래 코드를 통해 확인 가능합니다. 

void OnEnable()
{
     CloudServices.KeyValueStoreDidSynchroniseEvent     += OnKeyValueStoreDidSynchronise;
}

private void OnKeyValueStoreDidSynchronise (bool _success)
{
    if (_success)
    {
        Debug.Log("Successfully synchronised in-memory keys and values.");
    }
    else
    {
        Debug.Log("Failed to synchronise in-memory keys and values.");
    }
}

void OnDisable()
{
     CloudServices.KeyValueStoreDidSynchroniseEvent     -= OnKeyValueStoreDidSynchronise;
}

이걸 이용해 저장이 완료된 시점의 UI 연출을 하게 할 수 있습니다. 

 

저는 UI의 버튼을 통해 저장과 불러오기를 하기 때문에 버튼이 클릭될때만 저장과 불러오기가 되게 만들었지만 게임 진행시 데이터가 변경될 경우 호출해서 자동으로 저장하게 하는것도 가능하다고 합니다. 

 

저장방법에 대해 좀 더 자세한 내용이 알고 싶으시면 Cross Platform Native Plugins의 가이드를 참고하시기 바랍니다. 

assetstore.crossplatformnativeplugins.voxelbusters.com/