비트를 쪼개는 개발자

allen321@naver.com

Unity

Unity에서 Firebase를 이용해 실시간으로 DB를 연동해보기 (2)

MozarTnT 2025. 3. 29. 23:04
728x90
반응형

 

 

 

https://mozartnt.tistory.com/86

 

Unity에서 Firebase를 이용해 실시간으로 DB를 연동해보기 (1)

Firebase란? Firebase는 구글에서 제공하는 모바일이나 웹용 애플리케이션 개발을 위한 개발 플랫폼이다.여러가지 기능들을 제공하며 실시간 데이터베이스, 인증, 클라우드 스토리지 등 서버를 직

mozartnt.tistory.com

 

 

지난 글에서는 Firebase의 데이터베이스 기능을 Unity와 연동 시키기 위한 초기 세팅과 프로젝트 세팅을 완료하였다.

 

이제 직접 데이터베이스와 데이터를 주고 받기 위한 코드를 작성해보자.

 

먼저 우리는 Firebase와 통신하기 위한 매니저를 담당하는 클래스를 만들어 주어야 한다.

 

또한 해당 매니저 클래스는 partial class*로 작성해 여러 파일에서 하나에 클래스에 편하게 접근할 수 있도록 구조를 나누어 줄 계획이다.

 

 

 

partial class란?

- partial class는 큰 클래스를 여러 파일로 나누어 유지보수에 용이한 형태의 class이다.

 

 

 

먼저 변수로 선언한 auth는 Firebase에서 인증을 관리해 줄 변수이다.

 

currentUser는 현재 로그인이 되어 있는 사용자 정보를 받아 올 변수이며, reference는 실시간으로 Firebase에서 데이터베이스를 참조할 때 필요한 객체이다.

 

 

 

 

초기화를 위해 Init 함수를 먼저 작성해야 하는데,

 

Init 함수는 Firebase SDK에서 꼭 필요한 모든 구성 요소를 가지고 있는지 체크하고 누락된 사항이 있다면 초기화에 실패했다고 알려주는 함수이다.

 

FirebaseApp.CheckAndFixDependenciesAsync();

 

위 함수를 이용하면 Firebase SDK의 필수 구성 요소를 확인할 수 있는데, 필수 구성요소가 갖추어져 초기화에 성공 했다면 Firebase 서비스들을 순차적으로 초기화 하고 로그인을 실행한다.

 

// Firebase SDK의 모든 필수 구성요소가 있는지 확인하고 없으면 수정
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => 
{
	if(task.Result == DependencyStatus.Available)
	{
		// 파이어베이스 인증 객체 초기화
		auth = FirebaseAuth.DefaultInstance;
		// 현재 로그인한 사용자 객체 초기화
		currentUser = auth.CurrentUser;
		// 파이어베이스 데이터베이스 참조 객체 초기화
		reference = FirebaseDatabase.DefaultInstance.RootReference;

		GuestLogin();
		Debug.Log("Firebase 초기화 성공!");
	}
	else
	{
		Debug.Log("Firebase 초기화 실패: " + task.Exception.ToString());
    }
});

 

아마 성공적으로 작성했다면 Unity 실행 시 아래와 같은 메세지가 뜰 것이다.

(로그인 기능 구현 후 여러번 실행 시 이미 로그인 된 상태라는 메세지가 뜸)

 

 

 

 

전반적인 Firebase의 데이터 베이스 접근 기능을 담당하는 매니저 클래스를 이렇게 만들었다면 절반은 성공이다.

 

이제 각자 필요한 기능들, 즉 Firebase와 실시간으로 주고 받을 데이터를 각자 필요에 따라 만들고 또다른 partial class를 만든 뒤 Firebase와 주고 받을 준비만 하면 된다.

 

 

필자는 로그인과 관련된 데이터와 기존 프로젝트에서 캐릭터의 능력치와 관련된 부분을 DB에 작성한 이력이 있어서 해당 코드를 변형해 Firebase와 연동했으니 아래의 글은 각자 기능을 구현하기 위해 참고용으로 보면 될 듯 하다.

 

 

 

먼저 로그인과 관련된 기능은 다음과 같이 작성했다.

 

 

 

다른 partial class에서 데이터를 읽고 쓰기 위한 WriteData() 함수와 ReadData() 함수를 구현해주고, 우리가 기존에 작성한 Manager class에서 로그인 유저 정보를 가져오기 위해 auth 변수에 접근해서 인증이 유효한지 확인해주자.

 

auth.CurrentUser가 존재한다면 이미 로그인이 완료된 상태로 가정하고 ReadData() 함수를 이용해 바로 데이터를 받아주자.

 

그렇지 않다면 task가 취소되었거나 실패한 경우에는 로그인을 실패했다는 메세지를 출력하고

 

해당 경우가 아니라면 로그인을 성공시켜 주고 새로운 로그인 ID를 부여하는 식으로 코드를 간단하게 작성했다.

 

 

 

 

캐릭터 능력치에 관련된 부분도 기존 데이터가 Dictionary 형식으로 작성되어서 Firebase와 통신하기 위해 Json 형식으로 파싱해서 송수신이 가능하도록 변경해 주고 데이터를 송수신했다.

 

각자 필요에 맞게 partial class를 작성해 주고 우리가 기존에 방문했던 Firebase 홈페이지에서 데이터를 성공적으로 주고 받는지 확인해보자.

 

 

Firebase 홈페이지 방문 후 기존에 우리가 만든 프로젝트에 들어간 뒤 좌측에 있는 빌드를 클릭해 주고 Authentication과 Realtime Database를 클릭해보자.

 

각자 만든 기능들이 성공적으로 송수신이 완료 되었다면 다음과 같이 데이터를 주고 받은 이력이 남는다.

 

 

 

 

로그인 이력은 다음과 같이 생성 날짜와 UID 이력이 남는다.

 

 

 

 

그리고 임시로 작성해 본 캐릭터의 능력치 또한 잘 주고 받은 이력이 남아있다.

 

 

 

 

여기까지 간단하게 Unity와 Firebase를 연동해 데이터를 주고 받는 방법에 대해 알아보았다.

 

코드를 작성하는 방법에는 상당히 다양한 방법이 있고 본문보다 유용한 방식도 해외 커뮤니티에 나와 있으니 익숙해진 이후에는 각자의 코드 스타일에 맞추어 이용하면 더욱 훌륭한 구조로 코드 작성이 가능할 것이라고 생각한다.

728x90
반응형