[TIL] Unity + Firebase
Unity + Firebase 연동
Unity에 Firebase를 붙이면서 알게 된 핵심 개념들을 짧게 정리하기
Firebase는 "켜는 데 시간이 걸린다"
Firebase는 인터넷 너머 서버와 통신하기 때문에, 앱이 켜지자마자 바로 쓸 수 없다. 준비가 끝날 때까지 기다려야 한다.
그래서 초기화를 담당하는 객체(FirebaseInitializer)를 따로 두고, 다른 코드들은 "Firebase 준비됐어?"를 물어본 뒤에 동작하도록 만든다.
bool isReady = await FirebaseInitializer.Instance.WaitForInitializationAsync();
if (!isReady) return; // 준비 안 됐으면 중단
비동기 (async / await)
위 코드의 await가 비동기다.
- 시간이 걸리는 작업(Firebase 준비, 서버 통신)을 기다리되, 게임 전체는 멈추지 않게 하는 문법.
- 라면 끓일 때 물 올려놓고 그동안 다른 일 하는 것과 같다.
await는 "이거 끝날 때까지 기다려, 단 화면은 멈추지 말고"라는 뜻.
싱글톤 (Singleton)
AuthManager, ProfileManager 같은 매니저들은 게임 전체에 딱 하나만 존재해야 한다. 그리고 어디서든 쉽게 접근할 수 있어야 한다.
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 관련 코드를 한 덩어리로 짜지 않고, 역할별로 매니저를 나눴다.
| 매니저 | 역할 |
|---|---|
FirebaseInitializer | Firebase 켜기 (App / Database / Auth 준비) |
AuthManager | 회원가입 / 로그인 / 로그아웃 |
ProfileManager | 닉네임 등 프로필 저장 / 불러오기 |
ScoreManager | 점수 저장 / 불러오기 |
FirebaseInitializer가 켜둔 Auth, Database를 다른 매니저들이 꺼내 쓰는 구조다. (집의 두꺼비집을 올려두면, 각 방은 콘센트에 플러그만 꽂으면 되는 것과 같다.)
정리
- Firebase는 준비에 시간이 걸리므로 비동기(await) 로 기다린 뒤 쓴다.
- 매니저는 싱글톤으로 만들어 어디서든 하나의 인스턴스에 접근한다.
- 초기화 / 인증 / 데이터 저장의 역할을 분리하면 코드가 깔끔해진다.


![[Unity] PC 세이브 데이터 Android로 옮기기](https://data.develog.develrocket.com/upload/develog/muchan/1792206352286-hd4xz4/_____2026-10-17_114953.png)
![[Unity] 제네릭 박싱 예방](https://data.develog.develrocket.com/upload/develog/gmumdev/1792123312021-bhxx2i/_____.png)