PlayFab과 Unity 연동 (3) - 닉네임 Data 보내고 가져오기
지난 단계까지는 Tutorial Youtube Video를 따라서 기본 기능들을 설정하였다. 이제는 현재 적용할려는 Unity Project의 필요에 맞게 수정하여 사용해보려고 한다.
① PlayFab에서는 기본적으로 계정별로 Profile에 Display Name을 등록할 수 있다. 그래서 Project에서 필요한 닉네임을 Field를 이 Display Name으로 대체하기로 하였다. Tutorial Video와는 다르게 필요에 의해서 'RegisterUser()' Method에 Display Name을 등록할 수 있도록 'LoginPagePlayfab' Script를 고치고, 원래의 로그인 성공시 다음 Scene으로 넘어가도록 정의한 'OnLoginSucceess()' Method를 Project 서비스 흐름대로 다음 Scene인 Character Selection Scene으로 넘어가도록 수정하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using PlayFab;
using PlayFab.ClientModels;
using System;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoginPagePlayfab : MonoBehaviour
{
[Header("Login")]
[SerializeField] private TMP_InputField EmailLoginInput;
[SerializeField] private TMP_InputField PasswordLoginput;
[SerializeField] private GameObject LoginPage;
[Header("Register")]
[SerializeField] private TMP_InputField UsernameRegisterInput;
[SerializeField] private TMP_InputField EmailRegisterInput;
[SerializeField] private TMP_InputField PasswordRegisterInput;
[SerializeField] private GameObject RegisterPage;
[Header("Recovery")]
[SerializeField] private TMP_InputField EmailRecoveryInput;
[SerializeField] private GameObject RecoveryPage;
private void Start()
{
}
private void Update()
{
}
#region Button Functions
public void RegisterUser()
{
var request = new RegisterPlayFabUserRequest
{
DisplayName = UsernameRegisterInput.text,
Email = EmailRegisterInput.text,
Password = PasswordRegisterInput.text,
RequireBothUsernameAndEmail = false
};
PlayFabClientAPI.RegisterPlayFabUser(request, OnRegisterSuccess, OnError);
}
public void Login()
{
var request = new LoginWithEmailAddressRequest
{
Email = EmailLoginInput.text,
Password = PasswordLoginput.text,
};
PlayFabClientAPI.LoginWithEmailAddress(request, OnLoginSuccess, OnError);
}
// private void OnLoginSuccess(LoginResult result)
// {
// SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
// }
public TMPro.TextMeshProUGUI t_logname;
private void OnLoginSuccess(LoginResult result)
{
PlayFabClientAPI.GetPlayerProfile(new GetPlayerProfileRequest(),
profileResult =>
{
string displayName = profileResult.PlayerProfile.DisplayName;
//t_logname.text = "displayName";
Debug.Log("Logged in as: " + displayName);
// You can use the display name for further actions if needed.
SceneManager.LoadScene("Selection"); // Change this line to load your "Selection" scene.
}, OnError);
}
public void RecoverUser()
{
var request = new SendAccountRecoveryEmailRequest
{
Email = EmailRecoveryInput.text,
TitleId = "BEF62",
};
PlayFabClientAPI.SendAccountRecoveryEmail(request, OnRecoverySuccess, OnErrorRecovery);
}
private void OnErrorRecovery(PlayFabError result)
{
}
private void OnRecoverySuccess(SendAccountRecoveryEmailResult obj)
{
OpenLoginPage();
}
private void OnError(PlayFabError Error)
{
Debug.Log(Error.GenerateErrorReport());
}
private void OnRegisterSuccess(RegisterPlayFabUserResult Result)
{
OpenLoginPage();
}
public void OpenLoginPage()
{
LoginPage.SetActive(true);
RegisterPage.SetActive(false);
RecoveryPage.SetActive(false);
}
public void OpenRegisterPage()
{
LoginPage.SetActive(false);
RegisterPage.SetActive(true);
RecoveryPage.SetActive(false);
}
public void OpenRecoveryPage()
{
LoginPage.SetActive(false);
RegisterPage.SetActive(false);
RecoveryPage.SetActive(true);
}
#endregion
}
② 위에서 등록한 Display Name을 출력할 첫번째 Scene인 'Character Selection' Scene에 적용할 'nick_selection.cs' C# Script를 생성하여 아래와 같이 작성하고 Scene에 Script 적용하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine.UI;
public class nick_selection : MonoBehaviour
{
public TMPro.TextMeshProUGUI t_name;
public void Start()
{
// Fetch and display PlayFab data when transitioning scenes
FetchDataFromPlayFab();
}
private void FetchDataFromPlayFab()
{
// Request to get the player's account info
GetAccountInfoRequest request = new GetAccountInfoRequest();
// Send the request to PlayFab
PlayFabClientAPI.GetAccountInfo(request, OnGetAccountInfoSuccess, OnGetAccountInfoFailure);
}
private void OnGetAccountInfoSuccess(GetAccountInfoResult result)
{
// Fetch and display user's display name
string displayName = result.AccountInfo.TitleInfo.DisplayName;
//Debug.Log("Fetched Display Name: " + displayName);
t_name.text = displayName;
// Fetch and display user's score
FetchScoreFromPlayFab();
}
private void OnGetAccountInfoFailure(PlayFabError error)
{
Debug.LogError("Failed to fetch PlayFab account info: " + error.ErrorMessage);
}
}
③ 위에서 등록한 Display Name을 출력할 두번째 Scene인 'My Page' Scene에 적용할 'nick_mypage.cs' C# Script를 생성하여 아래와 같이 작성하고 Scene에 Script 적용하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine.UI;
public class nick_mypage : MonoBehaviour
{
public TMPro.TextMeshProUGUI t_name, t_score1;
public void Start()
{
// Fetch and display PlayFab data when transitioning scenes
FetchDataFromPlayFab();
}
private void FetchDataFromPlayFab()
{
// Request to get the player's account info
GetAccountInfoRequest request = new GetAccountInfoRequest();
// Send the request to PlayFab
PlayFabClientAPI.GetAccountInfo(request, OnGetAccountInfoSuccess, OnGetAccountInfoFailure);
}
private void OnGetAccountInfoSuccess(GetAccountInfoResult result)
{
// Fetch and display user's display name
string displayName = result.AccountInfo.TitleInfo.DisplayName;
//Debug.Log("Fetched Display Name: " + displayName);
t_name.text = displayName;
// Fetch and display user's score
FetchScoreFromPlayFab();
}
private void OnGetAccountInfoFailure(PlayFabError error)
{
Debug.LogError("Failed to fetch PlayFab account info: " + error.ErrorMessage);
}
}
닉네임 출력결과