[TIL] Unity + Firebase

muchan
muchan
∙∙조회 8

Unity + Firebase 연동

Unity에 Firebase를 붙이면서 알게 된 핵심 개념들을 짧게 정리하기

Firebase는 "켜는 데 시간이 걸린다"

Firebase는 인터넷 너머 서버와 통신하기 때문에, 앱이 켜지자마자 바로 쓸 수 없다. 준비가 끝날 때까지 기다려야 한다.

그래서 초기화를 담당하는 객체(FirebaseInitializer)를 따로 두고, 다른 코드들은 "Firebase 준비됐어?"를 물어본 뒤에 동작하도록 만든다.

csharp
bool isReady = await FirebaseInitializer.Instance.WaitForInitializationAsync();
if (!isReady) return;  // 준비 안 됐으면 중단

비동기 (async / await)

위 코드의 await가 비동기다.

  • 시간이 걸리는 작업(Firebase 준비, 서버 통신)을 기다리되, 게임 전체는 멈추지 않게 하는 문법.
  • 라면 끓일 때 물 올려놓고 그동안 다른 일 하는 것과 같다. await는 "이거 끝날 때까지 기다려, 단 화면은 멈추지 말고"라는 뜻.

싱글톤 (Singleton)

AuthManager, ProfileManager 같은 매니저들은 게임 전체에 딱 하나만 존재해야 한다. 그리고 어디서든 쉽게 접근할 수 있어야 한다.

csharp
private static FirebaseInitializer instance;
public static FirebaseInitializer Instance => instance;

private void Awake()
{
    if (instance == null)
    {
        instance = this;
        DontDestroyOnLoad(gameObject);  // 씬 바뀌어도 유지
    }
    else
    {
        Destroy(gameObject);  // 중복이면 자기 자신 제거
    }
}

이렇게 하면 FirebaseInitializer.Instance로 어디서든 그 하나뿐인 객체에 접근할 수 있다.

  • static = 객체마다가 아니라 클래스 전체에 하나만 존재
  • DontDestroyOnLoad = 씬이 바뀌어도 파괴되지 않음 (로그인 정보 유지에 필요)

4. 역할을 나눈다

Firebase 관련 코드를 한 덩어리로 짜지 않고, 역할별로 매니저를 나눴다.

매니저역할
FirebaseInitializerFirebase 켜기 (App / Database / Auth 준비)
AuthManager회원가입 / 로그인 / 로그아웃
ProfileManager닉네임 등 프로필 저장 / 불러오기
ScoreManager점수 저장 / 불러오기

FirebaseInitializer가 켜둔 Auth, Database를 다른 매니저들이 꺼내 쓰는 구조다. (집의 두꺼비집을 올려두면, 각 방은 콘센트에 플러그만 꽂으면 되는 것과 같다.)

정리

  • Firebase는 준비에 시간이 걸리므로 비동기(await) 로 기다린 뒤 쓴다.
  • 매니저는 싱글톤으로 만들어 어디서든 하나의 인스턴스에 접근한다.
  • 초기화 / 인증 / 데이터 저장의 역할을 분리하면 코드가 깔끔해진다.