Skip to content

Instantly share code, notes, and snippets.

@koster
Last active June 7, 2024 09:37
Show Gist options
  • Save koster/49b8a910e6491ab9d4dfd89ddbaf761c to your computer and use it in GitHub Desktop.
Save koster/49b8a910e6491ab9d4dfd89ddbaf761c to your computer and use it in GitHub Desktop.
Example implementation of a player save manager using Playfab.
using System;
using System.Collections.Generic;
using UnityEngine;
using PlayFab;
using PlayFab.ClientModels;
public class PlayFabManager : MonoBehaviour
{
private const string PlayFabTitleId = "YOUR_PLAYFAB_TITLE_ID"; // Замените на ваш Title ID
private string backupSaveData;
[Serializable]
public class SaveData
{
public int level;
public int experience;
public Dictionary<string, int> inventory;
}
void Start()
{
PlayFabSettings.TitleId = PlayFabTitleId;
Login();
}
private void Login()
{
var request = new LoginWithCustomIDRequest
{
CustomId = SystemInfo.deviceUniqueIdentifier,
CreateAccount = true
};
PlayFabClientAPI.LoginWithCustomID(request, OnLoginSuccess, OnLoginFailure);
}
private void OnLoginSuccess(LoginResult result)
{
Debug.Log("Login successful!");
LoadPlayerData();
}
private void OnLoginFailure(PlayFabError error)
{
Debug.LogError("Error during login: " + error.GenerateErrorReport());
}
private void LoadPlayerData()
{
var request = new GetUserDataRequest();
PlayFabClientAPI.GetUserData(request, OnDataReceived, OnDataError);
}
private void OnDataReceived(GetUserDataResult result)
{
if (result.Data != null && result.Data.ContainsKey("SaveData"))
{
backupSaveData = result.Data["SaveData"].Value;
SaveData saveData = JsonUtility.FromJson<SaveData>(backupSaveData);
OnAccountLoaded(saveData);
}
else
{
Debug.Log("No save data found, initializing new save.");
SaveData newSaveData = new SaveData();
OnAccountLoaded(newSaveData);
}
}
private void OnDataError(PlayFabError error)
{
Debug.LogError("Error retrieving player data: " + error.GenerateErrorReport());
}
public void UpdateSave(string jsonSaveData)
{
if (!string.IsNullOrEmpty(backupSaveData))
{
BackupSaveData(backupSaveData);
}
var request = new UpdateUserDataRequest
{
Data = new Dictionary<string, string>
{
{ "SaveData", jsonSaveData }
}
};
PlayFabClientAPI.UpdateUserData(request, OnDataUpdated, OnDataUpdateError);
}
private void BackupSaveData(string jsonSaveData)
{
// Здесь можно добавить логику для бекапа сейва, например, отправка на сервер или сохранение локально
Debug.Log("Backup save data: " + jsonSaveData);
}
private void OnDataUpdated(UpdateUserDataResult result)
{
Debug.Log("Save data successfully updated.");
}
private void OnDataUpdateError(PlayFabError error)
{
Debug.LogError("Error updating save data: " + error.GenerateErrorReport());
}
private void OnAccountLoaded(SaveData data)
{
// Ваш код для обработки загруженного аккаунта
Debug.Log("Account loaded with data: " + JsonUtility.ToJson(data));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment