Unity Google Spreadsheet 연동하기

U

개발 환경

OS X
Unity3D 2019.2.7f2
VSCode

Library 추가하기

프로젝트가 생성되어 있다는 가정하에 VSCode를 이용해 Spreadsheet를 사용하기 위해 라이브러리를 추가하는 방법을 알아보겠습니다.

VSCode Extensions

VSCode의 좌측 하단 Extensions 탭으로 이동해 NuGet Package Manager를 설치합니다.

NuGet Package Manager 설치가 완료되면 Shift + Command + P (Shift + Ctrl + P)를 입력하여 Command Palette를 통해 필요한 라이브러리 설치를 진행해 보겠습니다.

Shift + Command + P (Shift + Ctrl + P)

Command Palette 창을 활성화시켜서 Nuget이라고 입력을 하여 ‘NuGet Package Manager: add Package’ 항목을 클릭합니다.

패키지 추가 항목을 클릭하면 설치할 패키지 명을 입력하는 창이 나오는데 ‘Google’이라고 입력 후 엔터키를 입력하면 Google과 관련된 패키지 목록이 아래처럼 출력 됩니다.

출력된 패키지 중 Google.Apis 항목을 클릭 후 설치할 버전을 클릭합니다. 이 글을 작성할 때는 1.43.0 버전을 이용하였습니다.

패키지 설치가 정상적으로 완료되고 유니티 프로젝트로 돌아가면 Spreadsheet를 사용하기 위한 라이브러리들이 설치된 것을 확인할 수 있습니다.

중복 라이브러리 제거하기

Spreadsheet를 사용하기 위한 라이브러리가 설치되었지만 폴더를 펼쳐보면 다양한 환경에서 사용이 가능하도록 수많은 버전의 라이브러리가 존재하는 것을 확인하실 수 있습니다.
이 글에서는 lib 하위 폴더에 net45폴더를 제외한 다른 폴더를 모두 제거하였습니다.

Google Sheets API 활성화 하기

클라이언트 환경 설정이 완료되었으니 Sheet에 접근하기 위한 API를 활성화해야 합니다. API를 활성화하는 방법으로 구글 개발자 콘솔에서 프로젝트를 직접 생성하고 API Key를 발급받는 방법과 샘플 프로젝트를 생성하는 방법이 있는데 이 글에서는 샘플 프로젝트를 생성하는 방법으로 진행하겠습니다.

Sheets API QuickStart 페이지로 이동하여 API 활성화 버튼을 누르면 자동으로 프로젝트가 생성되고 Sheets API를 사용하는데 필요한 키값들이 출력 됩니다.

Enable the Google Sheets API 버튼을 누릅니다.
API Console 링크를 통하여 개발자 콘솔로 이동이 가능합니다.

Sheets API를 사용하기 위해 Client ID와 Client Secret 값이 필요하니 별도의 페이지에 복사해 놓거나 해당 페이지를 유지해주세요. 해당 값들은 API Console에서 언제든지 확인이 가능합니다.

스프레드 시트 생성하기

Unity에서 확인할 Spreadsheet를 생성하여 데이터를 입력해 보겠습니다.

Unity에서 확인 할 값들을 Spreadsheet에 입력합니다.

Sheets API 사용 시 시트 이름과 시트 ID (https://docs.google.com/spreadsheets/d/{SHEET ID}/edit#gid=0)가 필요합니다. Sheet ID는 주소창에 표시됩니다.

시트 설정의 마지막으로 우측 상단의 ‘공유’ 버튼을 클릭하여 아래와 같은 창이 출력되면 ‘공유 가능한 링크 가져오기’를 통해 시트를 공유 가능한 상태로 변경해 주어야 합니다.

공유 가능한 링크 가져오기를 통해 타인이 접근할 수 있도록 해야 합니다.

Sheets API 구현하기

//
// Created on Mon Jan 13 2020
//
// Copyright (c) 2020 CHANGGEUN YI
//

using UnityEngine;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Services;
using System.Threading;


public class Sample : MonoBehaviour
{
    void Start()
    {
		var secret			= new ClientSecrets();
		secret.ClientId		= "INPUT YOUR CLIENT ID";
		secret.ClientSecret = "INPUT YOUR CLIENT SECRET";

		var scopes = new string[]{ SheetsService.Scope.SpreadsheetsReadonly };
		var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secret, scopes, "user", CancellationToken.None).Result;
		var service = new SheetsService(new BaseClientService.Initializer()
		{
			HttpClientInitializer = credential,
			ApplicationName = "Google Spreadsheet Reader"
		});

		var request = service.Spreadsheets.Values.Get("INPUT YOUR SHEET ID", "INPUT YOUR SHEET NAME");
		var result = request.Execute().Values;
		var sb = new System.Text.StringBuilder();
		for (int row = 0; row < result.Count; row++)
		{
			var data = result[row];
			for (int col = 0; col < data.Count; col++)
			{
				sb.Append(data[col]);
				sb.Append(", ");
			}
			sb.Append("\n");
		}
		Debug.Log(sb.ToString());
    }
}

INPUT YOUR XXX 부분에 위에서 준비해 놓았던 Client ID, Client Secret, Sheet ID, Sheet Name의 값을 각자 환경에 맞는 값으로 입력해 주어야 합니다.

코드를 작성하고 프로젝트를 실행하면 계정을 인증하는 페이지로 리다이렉트 됩니다.

Google 계정 로그인이 필요합니다.

계정을 선택하고 로그인하면 Google 스프레드시트 조회를 허용하는 데 동의를 받게 되며 인증이 완료되면 페이지를 닫고 프로젝트의 콘솔을 확인해보면 시트에 입력된 값들이 출력되어 있는 것을 확인할 수 있습니다.

INDEX, NAME, 
1, 사과, 
2, 포도, 
3, 배, 
4, 바나나, 
5, 오렌지, 

이 글에서는 스프레드시트 읽기에 대한 부분만 다루었지만 코드의 Scope에 쓰기 권한을 추가하면 쓰기도 가능하며 시트 조회 시 전체를 읽어오는 방법이 아닌 특정 위치의 데이터를 읽어오는 방법도 존재합니다.

이 글에서 다루지 않은 부분은 문서를 참고하시면 어렵지 않게 구현이 가능합니다.

1 comment

  • I’m impressed, I have to say. Actually hardly ever do I encounter a blog that’s both educative and entertaining, and let me let you know, you could have hit the nail on the head. Your idea is outstanding; the difficulty is something that not sufficient individuals are talking intelligently about. I am very completely happy that I stumbled throughout this in my search for something relating to this.

By berabue

최신 글

보관함

최신 댓글

메타