1. Playfab 홈페이지에서 회원가입 후 로그인!
2. 새로운 타이틀 생성
3. Playfab SDK 다운로드
Unity Playfab SDK: https://aka.ms/playfabunitysdkdownload
Unity Playfab Extensions SDK: https://aka.ms/playfabunityextension
※ Playfab Unity3D 링크
4. 유니티에 Playfab SDK 임포트
5. 편집기 확장에서 플레이팹 로그인 & 설정
※ 로그인 및 설정 방법
6. UI 제작 및 관련 스크립트
▶로그인
▶회원가입
▶ 캐릭터 생성
▶ UI 스크립트
더보기
- FindSelectableOnDown() 메서드를 사용하여 Tab키를 누르면 다음 오브젝트가 선택되게 했다.
- 버튼.onClick.Invoke() 메서드를 사용하여 Enter(Return)키를 누르면 상황에 맞는 PlayfabManager 스크립트의 함수를 호출하도록 했다.
- 캐릭터 생성 창의 캐릭터 선택은 토글 버튼을 그룹으로 묶어 하나만 선택하게 하였고, 활성화된 토글의 값을 전달할 수 있게 하였다.
using UnityEngine.EventSystems;
public class UI : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Tab))
{
Selectable next = system.currentSelectedGameObject.GetComponent<Selectable>().FindSelectableOnDown();
if (next != null)
{
next.Select();
}
}
else if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
if (_signupPanelAnim.GetBool("On"))
{
_signupButton.onClick.Invoke();
}
else if (_characterPanel.activeSelf)
{
_crpButton.onClick.Invoke();
}
else
{
_loginButton.onClick.Invoke();
}
}
}
public void SButton(bool isOn)
{
if(isOn)
_sex = toggleGroup.ActiveToggles().FirstOrDefault().name;
}
}
7. 스크립트 작성
▶ 회원가입
더보기
using PlayFab;
using PlayFab.ClientModels;
public class SignupManager : MonoBehaviour
{
public Text id; // 아이디
public Text password; // 비밀번호
public Text verifyPassword; // 비밀번호 확인
public Text signupError; // 에러 텍스트
public void Signup()
{
if ("password".Equals("verifyPassword")) // 비밀번호 확인
{
// RequireBothUsernameAndEmail이 false로 설정해주지 않으면 이메일을 설정해줘야 한다.
var request = new RegisterPlayFabUserRequest { Username = "id", Password = "password", RequireBothUsernameAndEmail = false };
PlayFabClientAPI.RegisterPlayFabUser(request, OnRegisterSuccess, OnRegisterFailure);
}
}
void OnRegisterSuccess(RegisterPlayFabUserResult result)
{
//회원가입 성공 시, 나는 로그인창으로 돌아가도록 설정
}
void OnRegisterFailure(PlayFabError error)
{
string errorLog = error.GenerateErrorReport();
if (errorLog.Contains("Username not available"))
signupError.text = "이미 존재하는 계정입니다.";
else if (errorLog.Contains("between"))
signupError.text = "비밀번호가 6자 이상 100자 이하이어야 합니다.";
else if (errorLog.Contains("Password, EncryptedRequest"))
signupError.text = ">계정이름이나 비밀번호를 입력해주세요.";
else if (errorLog.Contains("Invalid username or password"))
signupError.text = "계정이름이나 패스워드가 잘못되었습니다.";
else
Debug.Log(errorLog);
}
}
▶ 로그인
더보기
using PlayFab;
using PlayFab.ClientModels;
public class LoginManager : MonoBehaviour
{
public Text id;
public Text password;
public Text loginError;
public void Login()
{
var request = new LoginWithPlayFabRequest { Username = id, Password = password };
PlayFabClientAPI.LoginWithPlayFab(request, OnLoginSuccess, OnLoginFailure);
}
void OnLoginSuccess(LoginResult result)
{
//로그인 성공 시, 플레이팹 아이디를 변수로 저장
Singleton.Inst.Playfab_ID = result.PlayFabId;
//유저 정보 불러오기
var request = new GetAccountInfoRequest { Username = id };
PlayFabClientAPI.GetAccountInfo(request, GetAccountSuccess, (PlayFabError error) => { Debug.Log("사용자 정보 가져오기 실패"); });
}
void OnLoginFailure(PlayFabError error)
{
loginError.text = "계정이름이나 비밀번호가 일치하지 않습니다.";
}
void GetAccountSuccess(GetAccountInfoResult result)
{
// Display Name이 비어있다면 NewCRT 데이터 추가
string nickname = result.AccountInfo.TitleInfo.DisplayName;
if (nickname == null)
{
var request = new UpdateUserDataRequest() { Data = new Dictionary<string, string>() { { "NewCRT", "N" } } };
PlayFabClientAPI.UpdateUserData(request, (result) => print("정보 저장 성공"), (Error) => print("정보 저장 실패"));
캐릭터 생성 패널 활성화
}
else
{
var request = new GetUserDataRequest() { PlayFabId = Singleton.Inst.Playfab_ID };
PlayFabClientAPI.GetUserData(request, GetDataSuccess, (error) => print("실패"));
}
}
void GetDataSuccess(GetUserDataResult result)
{
// NewCRT로 캐릭터 생성을 했는지 안했는지 파악
if (result.Data["NewCRT"].Value.Equals("N"))
{
캐릭터 생성 패널 활성화
}
else if (result.Data["NewCRT"].Value.Equals("Y"))
{
포톤 서버 연결
}
}
}
▶ 캐릭터 생성
더보기
using PlayFab;
using PlayFab.ClientModels;
public class CreateCharacter : MonoBehaviour
{
public Text nickNameText; // 유저 이름, DisplayName
public Text error;
public void CharacterNickNameOk()
{
createError.text = "";
var request = new UpdateUserTitleDisplayNameRequest { DisplayName = nickNameText.text };
PlayFabClientAPI.UpdateUserTitleDisplayName(request, DisplayNameUpdateSuccess, (error) => error.text = "사용할 수 없는 닉네임입니다.");
}
void DisplayNameUpdateSuccess(UpdateUserTitleDisplayNameResult result)
{
var request = new UpdateUserDataRequest() { Data = new Dictionary<string, string>() { { "Sex", _sex }, { "NickName", result.DisplayName }, { "Question", "문제모음" } } };
PlayFabClientAPI.UpdateUserData(request, NewCRTUpdateSuccess, (Error) => error.text = "캐릭터를 생성에 실패했습니다.");
}
void NewCRTUpdateSuccess(UpdateUserDataResult result)
{
var request = new UpdateUserDataRequest() { Data = new Dictionary<string, string>() { { "NewCRT", "Y" } } };
PlayFabClientAPI.UpdateUserData(request, (result) => 포톤 서버 연결, (Error) => error.text = "유저 저장에 실패했습니다.");
}
}
'포트폴리오 > 졸업작품' 카테고리의 다른 글
[MetaEdu] 유니티에서 .glb 사용 & 스폰 효과 적용하기! (0) | 2023.02.02 |
---|---|
[MetaEdu] 포톤을 사용한 로딩 창 만들기! (0) | 2023.02.01 |
[MetaEdu] New Input System의 키(바인딩)를 변경하는 방법! (0) | 2023.02.01 |
[MetaEdu] 캐릭터 얼굴에 그림자가 지던 현상 해결! (0) | 2023.02.01 |
[MetaEdu] 플레이어의 이름 표시 (0) | 2023.02.01 |