Question by
skillitronic · Dec 23, 2019 at 12:30 PM ·
serializationdatasave datacloudlocal
How to import data from serialized file to google play service cloud save?
Hi everyone. I'm making my game using serialization save method. And it works well, but now i need to know how to move this saved data from local file to google play cloud save. Here's my code:
Save function:
public void SaveScoreNCoins()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/ScoreInfo.dat");
PlayerData data = new PlayerData();
data.saveCoinsData = saveScoreCoins.coins;
data.saveScoreData = saveScoreCoins.highScore;
bf.Serialize(file, data);
file.Close();
}
Local data storage:
[Serializable]
class PlayerData
{
public int sceneDataCounter;
public int saveLanguageData;
public int saveCoinsData;
public int saveScoreData;
public bool isPressedSound;
public bool isPressedMusic;
}
Google play services script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using GooglePlayGames.BasicApi.SavedGame;
public class GoogleServices : MonoBehaviour
{
private static ISavedGameClient savedGameClient;
private static ISavedGameMetadata currentMetaData;
private static DateTime startDateTime;
public const string DEFAULT_SAVE_NAME = "Save";
public static bool IsAuth
{
get
{
if (PlayGamesPlatform.Instance != null) return PlayGamesPlatform.Instance.IsAuthenticated();
return false;
}
}
public static void Initilize(bool debug)
{
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.EnableSavedGames()
.Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = debug;
PlayGamesPlatform.Activate();
startDateTime = DateTime.Now;
}
public static void Auth(Action<bool> onAuth)
{
Social.localUser.Authenticate((success) =>
{
if (success) savedGameClient = PlayGamesPlatform.Instance.SavedGame;
onAuth(success);
});
}
private static void OpenSaveData(string fileName, Action<SavedGameRequestStatus, ISavedGameMetadata> onDataOpen)
{
if (!IsAuth)
{
onDataOpen(SavedGameRequestStatus.AuthenticationError, null);
return;
}
savedGameClient.OpenWithAutomaticConflictResolution(fileName,
DataSource.ReadCacheOrNetwork,
ConflictResolutionStrategy.UseLongestPlaytime,
onDataOpen);
}
public static void ReadSaveData(string fileName, Action<SavedGameRequestStatus, byte[]> onDataRead)
{
if (!IsAuth)
{
onDataRead(SavedGameRequestStatus.AuthenticationError, null);
return;
}
OpenSaveData(fileName, (status, metadata) =>
{
if (status == SavedGameRequestStatus.Success)
{
savedGameClient.ReadBinaryData(metadata, onDataRead);
currentMetaData = metadata;
}
});
}
public void WriteSaveData(byte[] data)
{
if (!IsAuth || data == null || data.Length == 0)
return;
TimeSpan currentSpan = DateTime.Now - startDateTime;
Action onDataWrite = () =>
{
TimeSpan totalPlayTime = currentMetaData.TotalTimePlayed + currentSpan;
SavedGameMetadataUpdate.Builder builder = new SavedGameMetadataUpdate.Builder()
.WithUpdatedDescription("Saved game at " + DateTime.Now)
.WithUpdatedPlayedTime(totalPlayTime);
SavedGameMetadataUpdate updatedMetadata = builder.Build();
savedGameClient.CommitUpdate(currentMetaData,
updatedMetadata,
data,
(status, metadata) => currentMetaData = metadata);
startDateTime = DateTime.Now;
};
if (currentMetaData == null)
{
OpenSaveData(DEFAULT_SAVE_NAME, (status, metadata) =>
{
Debug.Log("Cloud data write status: " + status.ToString());
if (status == SavedGameRequestStatus.Success)
{
currentMetaData = metadata;
onDataWrite();
}
});
return;
}
onDataWrite();
}
public static void GetSavesList(Action<SavedGameRequestStatus, List<ISavedGameMetadata>> onReceiveList)
{
if (!IsAuth)
{
onReceiveList(SavedGameRequestStatus.AuthenticationError, null);
return;
}
savedGameClient.FetchAllSavedGames(DataSource.ReadNetworkOnly, onReceiveList);
}
}
Comment