ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PlayFab과 Unity 연동 (2) - 로그인, 회원가입, 비밀번호 찾기 기능 구현
    CS/졸업 프로젝트(Duk to Me) 2023. 9. 18. 02:28
    반응형

       지난 포스트에 이어서 PlayFab과 Unity 연동을 해보자.

     


     

    ① PlayFabSDK 설치가 Unity Project에 되어있으므로, Window > PlayFab > Editor Extensions 를 클릭하면 나오는 창에서 지난번에 만든 PlayFab 계정 정보를 입력하여 로그인하기

     

    ② 로그인에 성공하면 나오는 화면으로 최신버전의 PlayFabSDK가 잘 설치되어 있는지 확인 가능 (최신버전이 아니라면 최신버전으로 다시 SDK 설치 필요) 여기서 SETTINGS > STUDIO > 'TutorialStudio'(지난번 PlayFab Web에서 생성한 Studio 이름) 을 클릭하면 밑에 지난번에 수정한 Game Title이 'TITLE ID' 칸에 나오는 것을 확인

     

    ③ 계정 생성을 위한 Method를 정의한 Code를 'LoginPagePlayfab' Script에 아래와 같이 추가하여 수정하기

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using TMPro;
    using PlayFab;
    using PlayFab.ClientModels;
    
    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()
        {
        	// if statement if password is less than 6 message text = Too short password;
            
            var request = new RegisterPlayFabUserRequest
            {
                DisplayName = UsernameRegisterInput.text,
                Email = EmailRegisterInput.text,
                Password = PasswordRegisterInput.text,
                RequireBothUsernameAndEmail = false
            };
    
            PlayFabClientAPI.RegisterPlayFabUser(request, OnRegisterSuccess, OnError);
        }
    
        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
    }

     

    ④ 'RegisterAreaHolder' UI의 'Register' Button의 'On Click()' > '+' 클릭하여 'LoginPagePlayfab' Script 가 적용되어 있는 Game Object인 'LoginSystem'을 가져와서 새로 추가한 Method인 'RegisterUser()'를 등록하기. 이로써 회원가입 기능 구현이 되었고 Project를 Play 하여 Username, Email, Password를 입력하여 계정을 생성하였을 때, PlayFab Web에서 Game Studio > Title  > Players > Search 로 들어가면 확인 가능

     

    ⑤ 로그인 동작을 정의하는 새로운 Method를 추가하여 Script 수정하기

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using TMPro;
    using PlayFab;
    using PlayFab.ClientModels;
    using System;
    using UnityEngine.SceneManagement;
    
    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()
        {
        	// if statement if password is less than 6 message text = Too short password;
            
            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);
        }
    
        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
    }

     

    ⑥ 'Thegame'이라는 이름의 새로운 Game Scene을 생성하고, File > Build Settings > Add Open Scenes를 클릭하여 'Thegame' Scene을 'LoginScene_01' 밑에 추가하기

     

    ⑦ 'LoginAreaHolder' UI의 'LoginButton' Button의 'On Click()' > '+' 클릭하여 'LoginPagePlayfab' Script 가 적용되어 있는 Game Object인 'LoginSystem'을 가져와서 새로 추가한 Method인 'Login()'를 등록하기. 이로써 로그인 기능 구현이 되었고 Project를 Play 하여 로그인 성공시, Build Settings에서 설정한대로 다음 Scene인 'Thegame' Scene으로 넘어가는 것으로 확인 가능

     

    ⑧ 비밀번호 찾기 기능 동작을 정의하는 RecoverUser() Method를 추가하여 Script를 수정하기. TitleId는 각자 Window > PlayFab > Editor Extensions > SETTINGS > TITLE ID 의 괄호안에 있는 문자를 입력 (계정별로 다름)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using TMPro;
    using PlayFab;
    using PlayFab.ClientModels;
    using System;
    using UnityEngine.SceneManagement;
    
    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()
        {
        	// if statement if password is less than 6 message text = Too short password;
            
            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 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
    }

     

    ⑨ 'ResetPasswordAreaHolder' UI의 'ResetPasswordButton' Button의 'On Click()' > '+' 클릭하여 'LoginPagePlayfab' Script 가 적용되어 있는 Game Object인 'LoginSystem'을 가져와서 새로 추가한 Method인 'RecoverUser()'를 등록하기. 이로써 비밀번호 찾기 기능 구현이 되었고 Project를 Play 하여 비밀번호 찾기 UI로 가서 계정의 Email 정보를 입력하면 등록한 Email로 Reset된 비밀번호가 전송된 것으로 확인 가능

     

     

    Reference

    반응형
Designed by Tistory.