Last active
June 7, 2024 09:37
-
-
Save koster/49b8a910e6491ab9d4dfd89ddbaf761c to your computer and use it in GitHub Desktop.
Example implementation of a player save manager using Playfab.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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