본문 바로가기
tips/유니티 & 개발

유니티에서 Firebase Storage를 이미지 서버로 이용하기.

by 디지털 수공업자 2021. 1. 7.
반응형

 

Firebase의 Storage에 올려놓은 이미지를 유니티에서 다운로드 받아 사용하기.
Firebase의 무료 플랜인 Spark 요금제로 5기가의 저장공간과 일일 1기가의 트래픽을 무료 사용할 수 있다. 작은 프로젝트를 시작할 때 무료로 사용하다가 사용자가 늘어나면 사용한 만큼 요금을 지불하는 Blaze 요금제로 전환하면 된다. Blaze 요금제를 사용하면 Spark요금제가 제공하는 모든 용량을 무료로 사용하고 Spark요금제에서 초과한 부분만 저장소 공간은 기가 당 0.026달러, 트래픽은 기가당 0.12달러를 추가된다. 



1. Firebase에 프로젝트 생성 및 유니티 초기 세팅

Firebase 콘솔에서 프로젝트 추가를 눌러 프로젝트를 생성한다.

프로젝트 생성한 후 콘솔의 메인화면에서 유니티아이콘을 눌러 유니티 앱을 추가한다. 앱 패키지 이름 앱 닉네임을 작성하고 앱 등록을 한 후 안드로이드 기준 google-services.json파일Firebase SDK를 다운받는다.
다운로드 받은 google-services.json파일은 유니티의 asset폴더에 복사하여 넣고, Firebase SDK중 FirebaseStorage.unitypackage를 실행하여 유니티 프로젝트에 추가한다.

 

2. Firebase Storage 설정

다시 Firebase 콘솔로 돌아와 해당 프로젝트의 왼쪽 메뉴에서 Storage를 누른다.
Storage 페이지의 Files탭 바로 아래 파일 업로드 버튼을 눌러 Storage에 저장할 이미지를 올리고, 폴더 구분이 필요하면 업로드 버튼 오른쪽 옆에 있는 폴더생성 버튼을 눌러 폴더를 만든 후 파일을 업로드한다.

이제 Rules탭으로 이동하여 규칙 수정 상태에서 접근 규칙을 수정하고 게시버튼을 누른다.
규칙에서 사용자에 허가설정이 되어 있어야 유니티에서 storage에 접근하는 것이 가능해진다.

service firebase.storage {

	match /b/{bucket}/0 {

		match /{allPaths=**} {

			allow read ;

			allow write: if request.auth != null ;

		}

	}
    
}

위 스크립트로 읽기는 모든 사용자에,  인증된 사용자에만 허가하는 것으로 지정했다.

 

3. 유니티 스크립트

Firebase.Storage.FirebaseStorage storage = Firebase.Storage.FirebaseStorage.DefaultInstance;

Firebase.Storage.StorageReference reference = storage.GetReferenceFromUrl("gs://fd.appspot.com/img.png");


위의 두 줄로 Firebase storage와 연결하는 작업은 끝난다.
첫 줄에서 Firebase storage 클래스에 액세스 하고, 둘째 줄에서 Storage에 올려놓은 이미지파일의 주소를 참조한다.
이미지 주소를 참조하는 방식은 여러가지가 있지만, 결국 다 같다...

주소에 이미지 파일명을 포함하지 않고 추후 StorageReference에 Child메서드를 사용하여 이미지 파일에 대한 참조를 다시 만들 수도 있다. 몇 가지 더 필요한 참조방식은 공식 문서를 통해..

reference.GetDownloadUrlAsync().ContinueWith((Task<Uri> task) => {

	if (!task.IsFaulted && !task.IsCanceled) {

		print ("Download URL: " + task.Result);

	}

});

위에서 만든 reference에 GetDownloadUrlAsync()를 이용하여 storage에 올려져 있는 이미지파일의 URL을 받아오고, 유니티의 WWW에 이미지파일의 주소가 담겨져 있는 task.Result를 사용하여 이미지파일을 다운로드 한다. 

유니티에서 다운로드 받는 방식은 reference에 GetBytesAsync()로 바이트 배열을 다운받거나, GetStreamAsync()로 스트림하거나, 유니티의 WWW 또는 UnityWebRequest와 함께 GetDownloadUrlAsync()를 사용하면 되고, GetFileAsync() 메서드를 사용하면 파일을 직접 로컬 기기로 다운로드할 수 있다.


Firebase 요금제 : 
firebase.google.com/pricing?hl=ko
Firebase SDK 다운로드 : firebase.google.com/docs/unity/setup
보안 규칙 :
 firebase.google.com/docs/storage/security
파일 다운로드 : firebase.google.com/docs/storage/unity/download-files


 

반응형

댓글