ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PlayFab과 Unity 연동 (3) - 닉네임 Data 보내고 가져오기
    CS/졸업 프로젝트(Duk to Me) 2023. 9. 18. 20:12
    반응형

    지난 단계까지 설정한 것들을 UI 디자인만 Project에 맞게 바꾼 화면

     

        지난 단계까지는 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);
        }
    }

     

     


     

    닉네임 출력결과

     

    Character Selection Scene
    My Page Scene

     

     

    반응형
Designed by Tistory.