- [Photon] 회원가입 및 로그인2025년 05월 08일
- SiJun-Park
- 작성자
- 2025.05.08.:09
Playfab과 Photon을 이용해서 회원가입을 만들 예정이다.
https://assetstore.unity.com/packages/p/pun-2-free-119922
PUN 2 - FREE | 네트워크 | Unity Asset Store
Get the PUN 2 - FREE package from Photon Engine and speed up your game development process. Find this & other 네트워크 options on the Unity Asset Store.
assetstore.unity.com
위의 Photon2를 사용을 하였습니다.
public abstract class PopUp : MonoBehaviourPunCallbacks { public abstract void OnConfirm(); }
가장 먼저 PopUp을 많이 사용을 할 예정이라 추상화 클래스로 선언을 해주었습니다.
public enum PopUpType { Sign_Up } public class PopUpManager : MonoSingletonManager<PopUpManager> { [SerializeField] Transform Parents; [SerializeField] GameObject Panel; private Dictionary<PopUpType, GameObject> PopUp = new Dictionary<PopUpType, GameObject>(); public void Show(PopUpType type) { Panel.gameObject.SetActive(true); GameObject newPopUp = null; if (PopUp.TryGetValue(type, out newPopUp)) newPopUp.SetActive(true); else { newPopUp = Instantiate(Resources.Load<GameObject>(type.ToString())); if (newPopUp == null) { Debug.Log("[PopUp_manager.cs - Show] PopUp Create Err"); return; } newPopUp.transform.SetParent(Parents, false); PopUp.Add(type, newPopUp); } } public void PanelOff() => Panel.gameObject.SetActive(false); }
회원가입을 만들기 위해 PopUptype에 Sign_Up을 추가 해줍니다.
그 다음에 Dictionary로 구현을 하였는데, 그 이유는 해당 PopUp type에 맞추어서 GameObject를 띄우기 위해서 사용을 하였습니다.
또한 Panel을 사용한 이유는 PopUp이 떠있을 경우 뒤를 클릭을 못하도록 막아두기 위해서입니다.
그래서 Show함수를 가보면, 가장 먼저 Panel을 On해서 뒤를 클릭 못하도록 하고 만약에 해당 PopUp이 생성이 되었었다면?
Active를 해주고 그게 아니라면 새롭게 추가를 해줍니다.
[SerializeField] InputField emailInputField; [SerializeField] InputField passwordInputField; [SerializeField] InputField nicknameInpuField; public override void OnConfirm() { SignUp(); } public void Success(RegisterPlayFabUserResult registerPlayFabUserResult) { Debug.Log(registerPlayFabUserResult.Request); Debug.Log(registerPlayFabUserResult.ToString()); } public void Failure(PlayFabError playFabError) { } void SignUp() { if (string.IsNullOrEmpty(emailInputField.text) || string.IsNullOrEmpty(passwordInputField.text) || string.IsNullOrEmpty(nicknameInpuField.text)) { Debug.Log("!! InputField Empty !!"); return; } PhotonNetwork.NickName = nicknameInpuField.text; PlayerPrefs.SetString("NickName", PhotonNetwork.NickName); PlayerPrefs.Save(); var request = new RegisterPlayFabUserRequest { Email = emailInputField.text, Password = passwordInputField.text, Username = nicknameInpuField.text, DisplayName = nicknameInpuField.text }; PlayFabClientAPI.RegisterPlayFabUser( request, Success, Failure ); emailInputField.text = ""; passwordInputField.text = ""; nicknameInpuField.text = ""; PopUpManager.Instance.PanelOff(); gameObject.SetActive(false); }
위의 코드는 회원가입 입니다.
이메일과 암호와 닉네임을 입력을 받아 회원가입이 되게 하였고 마지막으로 Panel 까지 꺼주었습니다.
[SerializeField] InputField emailInputField; [SerializeField] InputField passwordInputField; public void Success(LoginResult loginResult) { PhotonNetwork.AutomaticallySyncScene = false; PhotonNetwork.GameVersion = "1.0f"; var request = new GetAccountInfoRequest(); PlayFabClientAPI.GetAccountInfo(request, GetInformationSuccess, GetInformationFail); } private void GetInformationSuccess(GetAccountInfoResult result) { string nikcname = result.AccountInfo.TitleInfo.DisplayName; if (string.IsNullOrEmpty(nikcname)) PhotonNetwork.LoadLevel("Login Scene"); // ERR else { PhotonNetwork.NickName = nikcname; PhotonNetwork.LoadLevel("Lobby Scene"); } } private void GetInformationFail(PlayFabError error){ Debug.LogError("GetAccountInfo 실패: " + error.GenerateErrorReport()); PhotonNetwork.LoadLevel("Login Scene"); // 실패 시 로그인 화면으로 } public void Success(RegisterPlayFabUserResult registerPlayFabUserResult) { Debug.Log(registerPlayFabUserResult.Request); Debug.Log(registerPlayFabUserResult.ToString()); } public void Failure(PlayFabError playFabError) { Debug.Log(playFabError.GenerateErrorReport()); } public void OnLogin() { var request = new LoginWithEmailAddressRequest { Email = emailInputField.text, Password = passwordInputField.text }; PlayFabClientAPI.LoginWithEmailAddress ( request, Success, Failure ); } public void OnSignUp() { PopUpManager.Instance.Show(PopUpType.Sign_Up); }
Playfab을 종합적으로 관리하는 Manager 스크립트 입니다.
로그인에 성공을 한다면 정보에 대한 request를 보내줍니다.
이렇게 해준 이유는 이렇게 하지 않으면 마지막으로 회원가입한 유저 기준으로 닉네임이 지속이 되기 때문에
Displayname을 불러오기 위해서 이렇게 구현을 하였습니다.
그와 동일하게 버튼 행동에 따라 회원가입, 로그인을 구현을 하였습니다.
FPS Project Login Scene 위가 기본 화면 입니다.
회원가입을 하면 뒤의 Panel이 활성화가 되고 Sign Up 창이 뜨게 됩니다.
아이디, 비밀번호, 닉네임을 입력을 한 후 회원가입을 할 수 있습니다.
그러면 Playfab의 관리창에서 회원가입이 된 것을 확인 할 수 있습니다.
이제 회원가입을 한 아이디와 비밀번호를 적고 로그인을 하면 성공적으로 됩니다!
'Unity > FPS Project' 카테고리의 다른 글
[Photon] 유저 입장 및 동기화 (0) 2025.05.14 [Photon] 로비 및 방 생성 (0) 2025.05.10 FPS Project - 12 [ 맵 수정 및 몬스터 소환 ] (0) 2025.05.02 FPS Project - 11 [ 점프 오류 수정 ] (0) 2025.04.18 FPS Project - 10 [ 이동 오류 수정 ] (0) 2025.04.14 다음글이전글이전 글이 없습니다.댓글