반응형

안녕하세요.

Unity와 Firebase를 연동한 후 Firebase기능 중 하나인 데이터베이스를 연동해보도록 하겠습니다.

 

1. Firebase셋팅

Firebase Colsole에 접속합니다.

https://console.firebase.google.com/?hl=ko 

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

프로젝트를 추가합니다.

프로젝트 이름을 입력한 후 계속 버튼을 클릭해줍니다.

 

애널리틱스 사용여부를 확인한 후 계속 버튼을 클릭합니다.

애널리틱스 계정 선택을 하라고 나옵니다.

따로 계정이 있다면 설정해주고, 없다면 Default Account for Firebase를 선택한 후 프로젝트 만들기를 클릭합니다.

잠시 기다린 후 준비되었다는 화면이 나오면 계속 버튼을 클릭합니다.

 

프로젝트 창으로 이동되는데, 여기서 Unity마크를 클릭합니다.

 

앱을 등록합니다.

IOS, Android를 각각 등록합니다.

 

유니티 ProjectSettings에 패키지네임을 적으면 됩니다.

 

IOS번들ID와 Android 패키지이름을 넣으면 앱등록 버튼이 활성화됩니다. 

클릭해줍니다.

google-services.json, GoogleService-Info.plist 구성 파일 다운로드를 해서 Unity프로젝트의 Assets폴더에 넣어줘야합니다.

넣어준 후 다음 버튼을 클릭합니다.

Firebase SDK 추가를 합니다.

Firebase Unity SDK(Zip)파을 다운로드 받은 후 압축을 풀어줍니다.

압축을 풀어주면 추후에 변경될지도 모르겠지만, 지금 제가 받은 파일에 dotnet3, dotnet4폴더로 구성되어있는데

버전에 따라 다른 패키지를 임포트합니다.(Unity 5.x버전은 dotnet3 패키지, Unity 2017.x이상에서는 dotnet4 패키지)

애널리틱스를 위에서 사용하기로 했으므로 FirebaseAnalytics.unitypackage를 임포트한 후 Database를 사용하기 위해 FirebaseDatabase.unitypackage도 임포트합니다. 기타 필요한 패키지를 임포트합니다.

 Assets(애셋) - Import Package(패키지 가져오기) - Custom Package(커스텀 패키지)로 추가 가능합니다.

그 후 Firebase Colsole로 돌아와서 다음을 클릭합니다.

이제 설정이 끝났습니다.

콘솔로 이동을 클릭합니다.

 

2. Firebase에서 Database추가

이제 Database를 추가해줍니다.

Realtime Database를 클릭합니다.

 

데이터 베이스 만들기를 클릭합니다.

다음으로 위치설정이있는데, 대한민국은 없기 때문에 미국으로 설정합니다.

테스트를 위해 테스트 모드에서 시작으로 설정합니다.

이제 데이터 베이스를 추가할 수 있도록 셋팅되었습니다.

 

3. 유니티(Unity)에 적용

간단하게 유니티에서 데이터 저장과 로드를 적용해보도록 하겠습니다.

빈오브젝트를 생성하고 스크립트를 넣습니다.

CFirebase.cs 코드는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Extensions;
 
public class CFirebase : MonoBehaviour
{
    DatabaseReference m_Reference;
    
    void Start()
    {
        m_Reference = FirebaseDatabase.DefaultInstance.RootReference;
 
        //WriteUserData("0", "aaaa");
        //WriteUserData("1", "bbbb");
        //WriteUserData("2", "cccc");
        //WriteUserData("3", "dddd");
 
        ReadUserData();
 
 
    }
 
    void ReadUserData()
    {
        FirebaseDatabase.DefaultInstance.GetReference("users")
            .GetValueAsync().ContinueWithOnMainThread(task =>
        {
            if (task.IsFaulted)
            {
                // Handle the error...
            }
            else if (task.IsCompleted)
            {
                DataSnapshot snapshot = task.Result;
                // Do something with snapshot...
            for ( int i = 0; i < snapshot.ChildrenCount; i++)
                Debug.Log(snapshot.Child(i.ToString()).Child("username").Value);
              
            }
        });
    }
 
    void WriteUserData(string userId, string username)
    {
        m_Reference.Child("users").Child(userId).Child("username").SetValueAsync(username);
    }
 
}
 
cs

 

WriteUserData함수를 통한 데이터를 저장하면, Database는 다음과 같이 저장됩니다. 

ReadUserData함수를 통해 데이터를 로드하면 디버그로그로 다음과 같이 출력되는 것을 확인할 수 있습니다.

반응형
  1. 일급비밀 2021.10.11 10:09

    안녕하세요
    Firebase로 storage사진이나 파일을 위에 있는 것으로 동일하게 싱핼 할 수도 있을까요?

+ Recent posts