728x90
반응형
SMALL
- 파이어베이스 회원가입 및 프로젝트 생성하기
https://firebase.google.com/?hl=ko
- 유니티에 아래와 같이 작업하기
1. 유니티에 다운로드한 FirebaseAnalytics 파일과 FirebaseAuth 파일 두개만 임포트하기
2. 파이어베이스 사이트에서 다운로드한 제이슨 파일 유니티 에셋에 추가
3. 유니티 하이어라키창에 관련 UI 생성
- inputField 2개(이메일, 패스워드)
- 버튼 3개(계정생성, 로그인, 로그아웃)
- text 1개 (로그인 정보를 전달할 텍스트창)
4. 스크립트 2개 생성(FirebaseAuthManager와 Loginsystem)
FirebaseAuthManager 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase.Auth;
using System;
public class FirebaseAuthManager
{
private static FirebaseAuthManager instance = null;
public static FirebaseAuthManager Instance
{
get
{
if (instance == null)
{
instance = new FirebaseAuthManager();
}
return instance;
}
}
private FirebaseAuth auth; //로그인 회원가입 등에 사용
private FirebaseUser user; // 인증이 완료된 유저 정보
public string UserID => user.UserId;
public Action<bool> LoginState;
public void Init()
{
auth = FirebaseAuth.DefaultInstance;
auth.StateChanged += OnChanged; //계정상태가 바뀔때마다 호출
}
private void OnChanged(object sender, EventArgs e) //이벤트 핸들러
{
if (auth.CurrentUser != user) //계정상태가 동일 하다면
{
bool signed=(auth.CurrentUser!=user&&auth.CurrentUser!=null);
if (!signed && user != null)
{
Debug.Log("로그아웃");
LoginState.Invoke(false);
}
user = auth.CurrentUser;
if (signed)
{
Debug.Log("로그인");
LoginState.Invoke(true);
}
}
}
public void Create(string email, string password) //회원가입
{
auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
{
if (task.IsCanceled)
{
Debug.LogError("회원가입 취소");
return;
}
if (task.IsFaulted)
{
//회원가입 실패 이유 (이메일이 비정상, 비밀번호가 너무 간단, 이미 가입된 이메일 등등..
Debug.LogError("회원가입 실패");
return;
}
AuthResult newUser = task.Result; //새로운 계정을 만들어 task 결과값을 넣음
Debug.Log("회원가입 완료");
});
}
public void Login(string email, string password) //로그인
{
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task =>
{
if (task.IsCanceled)
{
Debug.LogError("로그인 취소");
return;
}
if (task.IsFaulted)
{
//로그인 실패 이유
Debug.LogError("로그인 실패");
return;
}
AuthResult newUser = task.Result; //새로운 계정을 만들어 task 결과값을 넣음
Debug.Log("로그인 완료");
});
}
public void LogOut() //로그아웃
{
auth.SignOut();
Debug.Log("로그아웃");
}
}
namespace System
{
public delegate void EventHandler(object sender, EventArgs e);
}
Loginsystem 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LoginSystem : MonoBehaviour
{
public InputField email;
public InputField password;
public Text OutputText;
void Start()
{
FirebaseAuthManager.Instance.LoginState += OnChangedState;
FirebaseAuthManager.Instance.Init();
}
private void OnChangedState(bool sign)
{
OutputText.text = sign ? "로그인: " : "로그아웃: ";//sign이 참이면 로그인, 거짓이면 로그아웃
OutputText.text+=FirebaseAuthManager.Instance.UserID;
}
public void Create()
{
string e = email.text;
string p = password.text;
FirebaseAuthManager.Instance.Create(e,p);
}
public void Login()
{
FirebaseAuthManager.Instance.Login(email.text,password.text);
}
public void LogOut()
{
FirebaseAuthManager.Instance.LogOut();
}
}
5. Loginsystem 스크립트를 빈오브젝트에 컴포넌트한 후 오브젝트 할당하기
6. 게임 실행해보기
- 계정 생성하지 않은 아이디로 로그인 할 경우
이메일과 패스워드 입력 후 계정생성 버튼 클릭할 경우
아래와 같이 파이어베이스 사이트 Authentication 사용자 목록에서 가입한 이메일과 사용자UID 확인할 수 있음
** 관련 오류
is missing the class attribute 'ExtensionOfNativeClass'!
라는 오류가 뜬다면, MonoBehaviour를 상속받지 않은 오브젝트가 있다는 뜻임
즉 MonoBehaviour 상속받지 않은 FirebaseAuthManager 스크립트를 오브젝트에 컴포넌트할 경우 발생
728x90
반응형
LIST
'▶ SCP전쟁 개발일지' 카테고리의 다른 글
#문제해결 유니티 ERROR: Gradle failed to fetch dependencies (1) | 2024.04.12 |
---|---|
#문제해결 유니티 ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. (0) | 2024.04.09 |
#010 애니메이션 원하는 구간에 스크립트 코드 실행하기 (음악 재생, 비활성화 등) (0) | 2024.04.01 |
#009 공격 버튼 쿨타임, 카운트, fill amount, 애니메이션 제어 (0) | 2024.04.01 |
#008 스크롤 가로 리스트 제작 (도감 목록) (0) | 2024.02.27 |
댓글